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;
    }


     

  • 相关阅读:
    Json对象和Json字符串
    主界面的构造函数报错
    WPF DataGrid绑定的数据源更新后界面信息不更新
    WPF 数据绑定 ( 经验 )
    WPF 简单快速地去掉Button控件的边框
    字节数组与字符串形式的数字(序列号)之间的相互转换
    将十进制数字转换为字节数组
    WPF 调用线程无法访问此对象,因为另一个线程拥有该对象。
    cmd中一些命令
    Notepad++运行快捷键的设置
  • 原文地址:https://www.cnblogs.com/llguanli/p/7048374.html
Copyright © 2011-2022 走看看