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;
    }
};
相关推荐
yaoh.wang17 小时前
力扣(LeetCode) 13: 罗马数字转整数 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·跳槽
醇氧17 小时前
【Windows】优雅启动:解析一个 Java 服务的后台启动脚本
java·开发语言·windows
hetao173383718 小时前
2025-12-12~14 hetao1733837的刷题笔记
数据结构·c++·笔记·算法
椰子今天很可爱18 小时前
五种I/O模型与多路转接
linux·c语言·c++
MapGIS技术支持18 小时前
MapGIS Objects Java计算一个三维点到平面的距离
java·开发语言·平面·制图·mapgis
程序员zgh19 小时前
C++ 互斥锁、读写锁、原子操作、条件变量
c语言·开发语言·jvm·c++
小灰灰搞电子19 小时前
Qt 重写QRadioButton实现动态radioButton源码分享
开发语言·qt·命令模式
by__csdn19 小时前
Vue3 setup()函数终极攻略:从入门到精通
开发语言·前端·javascript·vue.js·性能优化·typescript·ecmascript
喵了meme19 小时前
C语言实战5
c语言·开发语言
廋到被风吹走20 小时前
【Java】常用设计模式及应用场景详解
java·开发语言·设计模式