C++ 二叉树的后序遍历 - 力扣(LeetCode)

点击链即可查看题目: 145. 二叉树的后序遍历 - 力扣(LeetCode)

一、题目

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历。

示例 1:

**输入:**root = 1,null,2,3

输出:3,2,1

解释:

示例 2:

**输入:**root = 1,2,3,4,5,null,8,null,null,6,7,9

输出:4,6,7,5,2,9,8,3,1

解释:

示例 3:

**输入:**root = \[\]

输出:\[\]

示例 4:

**输入:**root = 1

输出:1

提示:

  • 树中节点的数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

二、解题思路以及代码

cpp 复制代码
/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    //后序遍历只有访问完左子树才会访问根
    vector<int> postorderTraversal(TreeNode* root) 
    {
        stack<TreeNode*> st;
        vector<int> v;
        TreeNode* prev = nullptr;
        //先访问左路节点
        
        TreeNode* cur = root;
        while(cur || !st.empty())
        {
            while(cur)
            {
                //左路节点访问,并且入栈
                st.push(cur);
                cur = cur->left;
            }
            //取栈顶元素
            TreeNode* top = st.top();
            
            //访问右子树
            //右子树为空   或   prev是top的右,证明右子树已经访问完了
            if(nullptr == top->right || prev == top->right)
            {
                v.push_back(top->val);
                st.pop();
                prev = top;
            }
            else//右子树不为空,并且没有访问
            {
                cur = top->right; 
            }
        }
        return v;
    }
};
相关推荐
WL学习笔记4 分钟前
C & C++ 内存管理
c++·c++内存管理
顽疲41 分钟前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
宛 禾2 小时前
Qt 控件入门:QLabel 从拖拽到对象树,一篇讲透
c++·qt·学习
hetao17338373 小时前
联盟场-提高组-R7 & ZYZSC-S-Round 11
c++·算法
程序喵大人3 小时前
【C++入门】编译链接模型 - 07 链接器怎样把符号对上号
开发语言·c++·编译器·编译链接·链接器
微三云 - 廖会灵 (私域系统开发)3 小时前
供应链系统实战:多渠道订单聚合与分布式库存一致性方案总结
开发语言·分布式·php
局部有解3 小时前
Hot100 - 三数之和
数据结构·c++·算法
学逆向的3 小时前
C 数据溢出与精度丢失
c语言·开发语言·网络安全
longlongzihan3 小时前
C++ 常用数据结构速查:vector、stack、queue、list、树、图、哈希表等声明与核心操作
数据结构·c++·list