您的位置:首页 > 其它

LC145 Binary Tree Postorder Traversal

2016-07-28 09:35 351 查看
这个题比前序遍历难在,当tmp等于NULL时,stack需要不断地弹出节点,直到检查到一个节点,它的右节点不为空而且还没有被遍历过。这个判断条件写出来还是比较难。

当然,另一种巧妙的做法是,用前序遍历(按右根左的顺序)来求得数组,然后把数组做一个翻转就行。

class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
if(root==NULL)
return result;
stack<TreeNode*> is;
is.push(root);
TreeNode* tmp = root->left;
TreeNode* pre=NULL;
while(!is.empty()||tmp!=NULL)
{
if(tmp)
{
is.push(tmp);
tmp=tmp->left;
}
else
{
while(!is.empty()&&(is.top()->right==NULL||is.top()->right==tmp))
{
tmp=is.top();
result.push_back(tmp->val);
is.pop();
}
if(!is.empty())
tmp=is.top()->right;
else
return result;
}
}
return result;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: