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]
]
二叉树的广度优先周游,稍稍做一下处理。
1 class Solution {
2 public:
3 vector<vector<int> > levelOrder(TreeNode *root) {
4 // Start typing your C/C++ solution below
5 // DO NOT write int main() function
6
7 vector<vector<int> > answers;
8 if(root == NULL)
9 return answers;
10 queue<TreeNode *> * nodes = new queue<TreeNode *>();
11 vector<int> * v = NULL;
12 TreeNode * leftFirst;
13 nodes->push(root);
14 leftFirst = root;
15 bool hasLeftFirst = true;
16 while(!nodes->empty())
17 {
18 TreeNode * tmp = nodes->front();
19 nodes->pop();
20 if(tmp == leftFirst)
21 {
22 if(v != NULL)
23 answers.push_back(*v);
24 v = new vector<int>();
25 hasLeftFirst = false;
26 }
27 v->push_back(tmp->val);
28 if(tmp->left != NULL)
29 {
30 nodes->push(tmp->left);
31 if(hasLeftFirst == false)
32 {
33 hasLeftFirst = true;
34 leftFirst = tmp->left;
35 }
36 }
37 if(tmp->right != NULL)
38 {
39 nodes->push(tmp->right);
40 if(hasLeftFirst == false)
41 {
42 hasLeftFirst = true;
43 leftFirst = tmp->right;
44 }
45 }
46 }
47 if(v != NULL)
48 answers.push_back(*v);
49 return answers;
50 }
51 };