您的位置:首页 > 其它

[Leetcode] Binary Tree Zigzag Level Order Traversal

2013-03-10 09:16 537 查看
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]
]

两个栈搞定

class Solution{
public:
vector<vector<int> > zigzagLevelOrder(TreeNode *root)
{
stack<TreeNode*> level1;
stack<TreeNode*> level2;
vector<vector<int> > result;
vector<int> levelNum;
if(root==NULL) return result;

level1.push(root);

while(!level1.empty()||!level2.empty())
{
while(!level1.empty())
{
TreeNode *topNode = level1.top();
if(topNode->left) level2.push(topNode->left);
if(topNode->right) level2.push(topNode->right);
levelNum.push_back(topNode->val);
level1.pop();
if(level1.empty())
{
result.push_back(levelNum);
levelNum.clear();
}
}

while(!level2.empty())
{
TreeNode *topNode = level2.top();
if(topNode->right) level1.push(topNode->right);
if(topNode->left) level1.push(topNode->left);
levelNum.push_back(topNode->val);
level2.pop();
if(level2.empty())
{
result.push_back(levelNum);
levelNum.clear();
}
}

}

return result;
}
};


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