您的位置:首页 > 其它

[leetcode][tree] Binary Tree Postorder Traversal

2015-05-22 19:59 197 查看
题目:

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) {
vector<int> res;
postorderTraversalCore(root, res);
return res;
}
private:
void postorderTraversalCore(TreeNode *root, vector<int> &res){
if (NULL == root) return;
postorderTraversalCore(root->left, res);
postorderTraversalCore(root->right, res);
res.push_back(root->val);
}
};
非递归实现:

vector<int> postorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode *> sta;
TreeNode *p = root;//用于遍历
TreeNode *pre = NULL;//指向上一次遍历的节点
while (p || !sta.empty()){
while (p){//一直向左
sta.push(p);
p = p->left;
}
p = sta.top();
if (NULL == p->right || p->right == pre){//该节点没有右子树或者它的右子树已经遍历完毕
res.push_back(p->val);//访问节点
sta.pop();//节点出栈
pre = p;//更新pre
p = NULL;
}
else p = p->right;//右子树还没遍历,现在开始遍历右子树
}
return res;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: