您的位置:首页 > 其它

Binary Tree Zigzag Level Order Traversal

2017-05-09 20:49 232 查看
Binary Tree Zigzag Level Order Traversal

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,null,null,15,7]
,

3
/ \
9  20
/  \
15   7


return its zigzag level order traversal as:

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

解析:
与按行遍历一样,只是中间记录一下遍历的方向

代码:

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>>ans;
if (root==NULL) return ans;
queue<TreeNode *>que;
que.push(root);
int dir=1;

while (!que.empty())
{

int cnt=que.size();
vector<int>temp(cnt,0);
if (dir==0)
{
for (int i=cnt-1; i>=0; i--)
{
temp[i]=que.front()->val;

if (que.front()->left)
{
que.push(que.front()->left);
}
if (que.front()->right)
{
que.push(que.front()->right);
}
que.pop();
}
dir=1;
}
else
{

for (int i=0; i<cnt; i++)
{
temp[i]=que.front()->val;

if (que.front()->left)
{
que.push(que.front()->left);
}
if (que.front()->right)
{
que.push(que.front()->right);
}
que.pop();
}
dir=0;
}
ans.push_back(temp);
}
return ans;
}

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Binary Tree Zigzag L