[C++]leetcode题解之二叉树的后序遍历

时间:2020年10月18日

leetcode145

示例
在这里插入图片描述
了解:二叉树的后序遍历的访问顺序为先访问左孩子结点,再访问右孩子结点,最后访问根节点。

方法

(1)递归

void PostOrder(TreeNode *root,vector<int>&ans){
    if(root== nullptr)
        return;
    PostOrder(root->left,ans);		//先访问左孩子结点
    PostOrder(root->right,ans);		//再访问右孩子结点
    ans.emplace_back(root->val);	
}
vector<int> postorderTraversal(TreeNode* root){
    vector<int>ans;
    PostOrder(root,ans);
    return ans;
}

(2)迭代
我们知道前序遍历是根—>左—>右,后续遍历是左—>右—>根,那么我们只需要调整一下前序遍历的代码顺序,让其变成根—>右—>左的遍历顺序,然后再反转存储结点值的数组,输出的结果顺序就是左—>右—>根了。前序遍历的迭代版本见博文[C++]leetcode144题解之二叉树的前序遍历

vector<int> postorderTraversal(TreeNode *root) {
    vector<int> ans;
    if(root== nullptr)
        return ans;
    stack<TreeNode *>s;
    s.push(root);
    while(!s.empty()){
        auto cur=s.top();
        s.pop();
        ans.emplace_back(cur->val);		//存储根节点的值
        if(cur->left!= nullptr)		
            s.push(cur->left);			//如果左孩子不为空,则存储左孩子的值
        if(cur->right!= nullptr)
            s.push(cur->right);			//如果右孩子不为空,则存储右孩子的值
    }
    reverse(ans.begin(),ans.end());		//反转结果
    return ans;
}

收获
(1)、对二叉树的遍历的知识进一步掌握。
(2)、对二叉树后序遍历的迭代版本更加了解,明天可以试着做一下二叉树的中序遍历的迭代版本。

今天状态太差了,上火加看报文看的头晕,希望明天能够好好调整一下!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值