当前位置:首页 > 力扣 > 力扣145:递归之美 轻松掌握二叉树后序遍历

力扣145:递归之美 轻松掌握二叉树后序遍历

4个月前 (05-24)

力扣145:递归之美 轻松掌握二叉树后序遍历 C++ 力扣 二叉树 二叉树遍历 算法 链表 后序遍历 第1张

题目解读

二叉树后序遍历是一种基础且重要的遍历方式,其遍历顺序为:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。这种遍历方式特别适合需要先处理子节点再处理父节点的场景,如内存释放、表达式树求值等。给定一个二叉树的根节点,我们需要按照这个顺序访问所有节点,并将它们的值存储在一个列表中返回。


解题思路与过程

用递归方法来快速实现后序遍历。定义一个成员变量ret来存储遍历结果,以及一个辅助函数postorder来完成实际的递归遍历。当遇到空节点时直接返回,否则先递归处理左子树,然后递归处理右子树,最后将当前节点的值加入结果列表。主函数postorderTraversal初始化遍历过程并返回最终结果。


代码实现与注释

class Solution {
public:
    vector<int> ret; // 存储遍历结果的容器
    
    // 递归后序遍历辅助函数
    void postorder(TreeNode* root)
    {
        if(!root) // 递归终止条件:空节点
        {
            return;
        }
        postorder(root->left);     // 递归遍历左子树
        postorder(root->right);    // 递归遍历右子树
        ret.push_back(root->val);  // 最后访问当前节点(根)
    }
    
    // 主函数:初始化遍历过程并返回结果
    vector<int> postorderTraversal(TreeNode* root) {
        postorder(root); // 开始递归遍历
        return ret;      // 返回遍历结果
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

力扣第1991题:寻找数组的中心索引 如何找到左右和相等的中心索引

题目解读给定一个整数数组,我们需要找到一个中心索引,使得该索引左侧所有元素的和等于右侧所有元素的和。如果不存在这样的索引,则返回-1。中心索引的定义不包含在左右两侧的和计算中。这个问题考察对数组遍历和...

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

题目解读给定一个不含重复元素的整数数组,我们需要构建一棵最大二叉树。构建规则是:数组中的最大值作为根节点,其左侧子数组构建左子树,右侧子数组构建右子树,然后递归地应用这个规则。这种构建方式体现了分治思...

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

NOIP2005 普及组 洛谷P1408 背包问题的空间优化技巧与实战应用

题目重解想象你是一名药师,有t分钟在山上采集m种草药。每种草药需要time分钟采集,价值为num。这就像考试时分配时间做题,要选择收益最大的题目组合。题目要求计算在规定时间内能获得的最大草药价值。解题...

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

IOI 1994 洛谷1216:如何用O(1)空间解决数字三角形问题?附代码实现

题目重解:数字三角形是一个经典的动态规划问题,给定一个由数字组成的三角形结构,从顶部出发,每次可以移动到下方相邻的数字,最终到达底部。我们需要找到一条路径,使得路径上经过的数字总和最大。这个问题可以很...

手搓顺序表类代码注释与详解:从零实现动态数组(新手教程)

一、简介和特点顺序表(Sequential List)是数据结构中基础的一种线性表,其特点是将数据元素存储在连续的内存空间中。通过数组实现,支持随机访问(即通过索引直接访问元素),适用于频繁随机读取的...

牛客25665题详解:二叉树重建与三种遍历实现

牛客25665题详解:二叉树重建与三种遍历实现

一、题目解读牛客25665题要求根据给定的层序遍历和中序遍历序列重建二叉树,并输出:    1.所有叶子节点(从左到右)   &n...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。