您的位置:首页 > 其它

【leetcode】Binary Tree Zigzag Level Order Traversal

2015-06-06 22:47 417 查看
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]
]
confused what "{1,#,2,3}" means? > read more on how binary tree is serialized on OJ.

class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int> >res;
if(root==NULL) return res;

vector<int> level;
queue<TreeNode* > q;
q.push(root);

int cnt=1;
int curcnt=0;

bool order=true;

while(!q.empty())
{
TreeNode *node=q.front();
q.pop();
level.push_back(node->val);
if(node->left)
{
q.push(node->left);
curcnt++;
}
if(node->right)
{
q.push(node->right);
curcnt++;
}

cnt--;
if(cnt==0)
{
if(order)
{
res.push_back(level);
}else{
reverse(level.begin(),level.end());
res.push_back(level);
}

order=!order;
level.clear();
cnt=curcnt;
curcnt=0;
}
}
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: