和之前的层次遍历是一样的,只不过要在最后处理数组的时候,下一个层次利用reverse反转就好

 

 1 class Solution {
 2 public:
 3     vector<vector<int> > zigzagLevelOrder(TreeNode* root) {
 4         vector<vector<int> > v;
 5         vector<int> level;
 6         if (root == NULL)
 7             return v; 
 8         if (root ->left == NULL && root ->right == NULL)
 9         {
10             level.push_back(root->val);
11             v.push_back(level);
12             return v; 
13         }
14         queue<TreeNode*> q;
15         q.push(root);
16         TreeNode *trail,*cur; // trail record the last item in each level
17         trail = cur = root; 
18         
19         while(!q.empty())
20         {
21             TreeNode* pointer = q.front();
22             q.pop();
23             level.push_back(pointer->val);
24             if (pointer->left != NULL)
25             {
26                 cur = pointer->left;
27                 q.push(pointer->left);
28             }
29             if (pointer->right != NULL)
30             {
31                 cur = pointer->right;
32                 q.push(pointer->right);
33             }
34             if (pointer == trail)
35             {
36                 trail = cur;
37                 v.push_back(level);
38                 level.clear();
39             }    
40         }
41 
42         for(int i=0;i<v.size();i++)
43             if(i%2)
44                 reverse(v[i].begin(),v[i].end());
45 
46         return v;       
47     }
48 
49 };

 

posted on 2015-07-03 09:27  又岸  阅读(201)  评论(0)    收藏  举报