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] ]
Just use a stack and a flag..... But it is very easy to make mistakes....
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
if(!root) return {};
stack<TreeNode*> nodes;
nodes.push(root);
vector<vector<int>> res;
bool leftToRight = true;
while(!nodes.empty()) {
vector<int> level;
stack<TreeNode*> nextLevel;
while(!nodes.empty()) {
TreeNode* tmp = nodes.top();
nodes.pop();
level.push_back(tmp->val);
if(leftToRight) {
if(tmp->left)
nextLevel.push(tmp->left);
if(tmp->right)
nextLevel.push(tmp->right);
} else {
if(tmp->right)
nextLevel.push(tmp->right);
if(tmp->left)
nextLevel.push(tmp->left);
}
}
leftToRight = !leftToRight;
res.push_back(level);
nodes.swap(nextLevel);
}
return res;
本文介绍了一种使用栈实现的二叉树锯齿形层序遍历算法,通过控制方向标志实现从左到右再从右到左的交替遍历方式,并给出了具体的C++代码实现。
274

被折叠的 条评论
为什么被折叠?



