CoderJesse  
wangjiexi@CS.PKU
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 };

 

posted on 2013-03-01 13:09  CoderJesse  阅读(109)  评论(0)    收藏  举报