zoukankan      html  css  js  c++  java
  • Binary Tree Level Order Traversal

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, level by level).

    For example:
    Given binary tree {3,9,20,#,#,15,7},

        3
       / 
      9  20
        /  
       15   7
    

    return its level order traversal as:

    [
      [3],
      [9,20],
      [15,7]
    ]

    解题思路:能够用DFS和BFS思想来解这题.DFS仅仅须要递归遍历深度,将相应深度的值按顺序输出.在用BFS分层遍历时候。一開始内存超了。后来增加深度信息AC了

    #include<iostream>
    #include<vector>
    #include<queue>
    #include<map>
    #include<algorithm>
    using namespace std;
    
    struct TreeNode {
    	int val;
    	TreeNode *left;
    	TreeNode *right;
    	TreeNode(int x) : val(x), left(NULL), right(NULL) {}
    };
    //内存过大了
    vector<vector<int> > levelOrder(TreeNode *root) {
    	queue<TreeNode*>  BFS_Queue;
    	vector<int> LevelVal;
    	vector<TreeNode*> LevelNode;
    	vector<vector<int> > Result;
    
    	if (root == NULL)
    		return Result;
    	BFS_Queue.push(root);
    	
    	while (!BFS_Queue.empty())
    	{
    		while (!BFS_Queue.empty())
    		{
    			TreeNode* Curnode = BFS_Queue.front();
    			LevelVal.push_back(Curnode->val);
    			BFS_Queue.pop();
    			if (Curnode->left)
    				LevelNode.push_back(Curnode->left);
    			if (Curnode->right)
    				LevelNode.push_back(Curnode->right);
    		}
    		Result.push_back(LevelVal);
    		for_each(LevelNode.begin(), LevelNode.end(), [&BFS_Queue](TreeNode* a){BFS_Queue.push(a); });
    		LevelVal.clear();
    	}
    	return Result;
    	
    }
    //引入深度信息:AC
    vector<vector<int> > levelOrder(TreeNode *root) {
    	queue<pair<TreeNode*,int> >  BFS_Queue;
    	vector<int> LevelVal;
    	vector<vector<int> > Result;
    
    	if (root == NULL)
    		return Result;
    	BFS_Queue.push(make_pair(root,0));
    	int Curlevel = 0;
    	while (!BFS_Queue.empty())
    	{
    		TreeNode* Curnode = BFS_Queue.front().first;
    		if (BFS_Queue.front().second != Curlevel)
    		{
    			Result.push_back(LevelVal);
    			LevelVal.clear();
    			Curlevel = BFS_Queue.front().second;
    		}
    		LevelVal.push_back(Curnode->val);
    		BFS_Queue.pop();
    		if (Curnode->left)
    			BFS_Queue.push(make_pair(Curnode->left, Curlevel + 1));
    		if (Curnode->right)
    			BFS_Queue.push(make_pair(Curnode->right, Curlevel + 1));
    	}
    	Result.push_back(LevelVal);
    	return Result;
    }


     

  • 相关阅读:
    [原][osg]Geometry详解
    [osg]节点遍历nodevisitor浅析
    [原][osg]osgconv浅析
    [原][游戏][攻略]仙之侠道玖章-- --从入门到放弃
    [转][linux]简单的linux下的tcp/udp
    [转][c++][跨平台]c++跨平台开发小结
    人机交互,来和我猜拳吧!
    从零开始学测试【1】测试方法术语总结
    从零开始学测试【2】网页登录界面
    JSP 和 ASP.NET 谁能主宰未来【转】
  • 原文地址:https://www.cnblogs.com/llguanli/p/7048374.html
Copyright © 2011-2022 走看看