代码改变世界

leetcode - Binary Tree Zigzag Level Order Traversal

2013-03-05 21:24  张汉生  阅读(176)  评论(0编辑  收藏  举报

题目描述:点击此处

 1 /**
 2  * Definition for binary tree
 3  * struct TreeNode {
 4  *     int val;
 5  *     TreeNode *left;
 6  *     TreeNode *right;
 7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 8  * };
 9  */
10 class Solution {
11 public:
12   vector<vector<int> > zigzagLevelOrder(TreeNode *root) {
13     // Start typing your C/C++ solution below
14     // DO NOT write int main() function
15     vector<vector<int>> rlt;
16     if (root == NULL)
17       return rlt;
18     queue<TreeNode*> vt;
19     vector<int> vi;
20     vt.push(root);
21     vt.push(NULL);
22     TreeNode * node;
23     while(!vt.empty()){
24       node = vt.front();
25       if (node==NULL){
26         if (vi.size()>0){
27           rlt.push_back(vi);
28           vi = vector<int>();
29           vt.push(NULL);
30         }
31       }
32       else{
33         vi.push_back(node->val);
34         if (node->left != NULL)
35           vt.push(node->left);
36         if (node->right != NULL)
37           vt.push(node->right);
38       }
39       vt.pop();
40     }
41     vector<vector<int>> real_rlt;
42     int flag = 1;
43     vector<vector<int>>::iterator vii;
44     vector<int>::iterator ii;
45     for (vii = rlt.begin(); vii!=rlt.end();vii++){
46       if (flag ==0){
47         vi = vector<int>();
48         for (ii=(*vii).end()-1; ii+1 !=(*vii).begin(); ii--)
49           vi.push_back(*ii);
50         real_rlt.push_back(vi);
51       }
52       else {
53         real_rlt.push_back(*vii);
54       }
55       flag = 1 - flag;
56     }
57     return real_rlt;
58   }
59 };