标签:
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; }
Binary Tree Level Order Traversal
标签:
原文地址:http://blog.csdn.net/li_chihang/article/details/44302283