Binary Tree Zigzag Level Order Traversal

Description:

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

 

return its zigzag level order traversal as:

[
  [3],
  [20,9],
  [15,7]
]

Code:

 1 vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
 2        deque<TreeNode*>a;
 3        deque<TreeNode*>b;
 4        if (root)
 5             a.push_back(root);
 6         
 7        TreeNode*p = NULL;
 8        vector<vector<int>> result;
 9        
10        while (!a.empty() || !b.empty())
11        {
12            vector<int>temp;
13            if (!a.empty() )
14            {
15                 while (!a.empty() )
16                 {
17                p = a.front();
18                a.pop_front();
19                temp.push_back(p->val);
20                if (p->left)
21                     b.push_back(p->left);
22                 if (p->right)
23                     b.push_back(p->right);
24                 }
25                 result.push_back(temp);
26            }
27            else
28            {
29             while (!b.empty())
30            {
31                p = b.front();
32                b.pop_front();
33                temp.push_back(p->val);
34                if (p->left)
35                     a.push_back(p->left);
36                if (p->right)
37                     a.push_back(p->right);
38            }
39            result.push_back(temp);
40            }
41        }
42        for (int i = 1; i < result.size(); i+=2)
43        {
44            reverse(result[i].begin(),result[i].end());
45        }
46        return result; 
47     }

 

posted @ 2015-06-19 23:33  Rosanne  阅读(189)  评论(0编辑  收藏  举报