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)
第一行从左到右,第二行从右到左,第三行从左到右...这样的顺序遍历二叉树。
题目还算思路比较简单。用两个stack可以解决问题。下面是我自己的代码。
class Solution {
public:
//需要用到栈
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
stack<TreeNode*> iStack1;
stack<TreeNode*> iStack;
vector<vector<int>> result;
//root为NULL的情况
if(!root)
return result;
//root不为NULL的情况
iStack1.push(root);
vector<int> tmp;
tmp.push_back(root->val);
result.push_back(tmp);
while(!(iStack1.empty())||!(iStack.empty()))
{
vector<int> tmp;
while(!(iStack1.empty()))
{
TreeNode*p=iStack1.top();
if(p->right)
{
iStack.push(p->right);
tmp.push_back(p->right->val);
}
if(p->left)
{
iStack.push(p->left);
tmp.push_back(p->left->val);
}
iStack1.pop();
}
if(tmp.size()>0)
result.push_back(tmp);
vector<int> tmp1;
while(!(iStack.empty()))
{
TreeNode*p=iStack.top();
if(p->left)
{
iStack1.push(p->left);
tmp1.push_back(p->left->val);
}
if(p->right)
{
iStack1.push(p->right);
tmp1.push_back(p->right->val);
}
iStack.pop();
}
if(tmp1.size()>0)
result.push_back(tmp1);
}
return result;
}
};
本文介绍了一种使用两个栈实现的二叉树锯齿形层序遍历算法。首先从根节点开始,按从左到右的顺序压入第一个栈,再从右到左压入第二个栈,依次交替进行。通过这种方式实现了节点值的锯齿形层序遍历。
124

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



