您的位置:首页 > 其它

LeetCode *** 103. Binary Tree Zigzag Level Order Traversal

2016-04-19 09:21 337 查看
题目:

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]
]


分析:

用两个栈。

代码:

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>> res;
vector<int> record;
if(root==NULL)return res;

stack<TreeNode*> s1,s2;
bool f1=true,f2=false;

s1.push(root);

while(!s1.empty()||!s2.empty()){
if(f1&&!s1.empty()){
TreeNode* tmp=s1.top();
s1.pop();
record.push_back(tmp->val);
if(tmp->left)s2.push(tmp->left);
if(tmp->right)s2.push(tmp->right);
if(s1.empty()){
f1=false;
f2=true;
res.push_back(record);
record.erase(record.begin(),record.end());
}

}else if(f2&&!s2.empty()){
TreeNode* tmp=s2.top();
s2.pop();
record.push_back(tmp->val);
if(tmp->right)s1.push(tmp->right);
if(tmp->left)s1.push(tmp->left);
if(s2.empty()){
f2=false;
f1=true;
res.push_back(record);
record.erase(record.begin(),record.end());
}
}
}
return res;

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