# 145. Binary Tree Postorder Traversal

141人阅读 评论(0)

Given a binary tree, return the postorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1
\
2
/
3


return [3,2,1].

Note: Recursive solution is trivial, could you do it iteratively?

/**
* 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<int> postorderTraversal(TreeNode* root) {
struct TreeNodeFlag{
TreeNode* node;
bool flag;
TreeNodeFlag(TreeNode* x) :node(x), flag(false){}
};
vector<int> res;
stack<TreeNodeFlag *> mystack;
TreeNodeFlag* p = new TreeNodeFlag(root);
if (p->node){
mystack.push(p);
while (p->node->left){
p = new TreeNodeFlag(p->node->left);
mystack.push(p);
}
while (p->node->right){
p->flag = true;
p = new TreeNodeFlag(p->node->right);
mystack.push(p);
while (p->node->left){
p = new TreeNodeFlag(p->node->left);
mystack.push(p);
}
}
}

while (!mystack.empty()){
TreeNodeFlag* t = mystack.top();
if (t->flag == true || t->node->right == NULL){
res.push_back(t->node->val);
mystack.pop();
}
else{
while (t->node->right){
t->flag = true;
t = new TreeNodeFlag(t->node->right);
mystack.push(t);
while (t->node->left){
t = new TreeNodeFlag(t->node->left);
mystack.push(t);
}
}
}
}
return res;
}
};

0
0

* 以上用户言论只代表其个人观点，不代表CSDN网站的观点或立场
个人资料
• 访问：40727次
• 积分：2676
• 等级：
• 排名：第14145名
• 原创：241篇
• 转载：4篇
• 译文：0篇
• 评论：0条