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;
}
};