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


     

  • 相关阅读:
    Java中的Date类型无法赋值给数据库的datetime类型
    在HTML中改变input标签中的内容
    sizeof计算类的大小
    UML类图,转载
    大端小段详解—转载
    leetcode练习
    linux基础
    排序算法和查找算法

    链表
  • 原文地址:https://www.cnblogs.com/llguanli/p/7048374.html
Copyright © 2011-2022 走看看