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

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

2个月前 (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;      // 返回遍历结果
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣746:三步通关最小花费爬楼梯

力扣746:三步通关最小花费爬楼梯

题目解析:站在楼梯的某个台阶时,需要支付当前台阶对应的体力值cost[i],之后可以选择向上爬1或2个台阶。最终目标是到达‌楼层顶部‌(即数组末尾之后的位置),且初始位置可选择下标0或1的台阶作为起点...

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

力扣740.删除并获得点数 预处理与动态规划的巧妙融合

题意解析:给定一组数字,每当你选择一个数字x时,所有等于x-1和x+1的数字都会被自动移除。你需要通过巧妙的选择顺序,最大化获得的点数总和。这个问题可以转化为对离散化数字分布的动态规划问题——将相邻数...

线性遍历+二进制 6行代码征服二进制链表转整数

线性遍历+二进制 6行代码征服二进制链表转整数

力扣1290.二进制链表转整数题目本质给定一个单链表的头节点head,链表中每个节点的值为0或1。链表表示一个‌最高有效位在前‌的二进制数字,要求将其转换为对应的十进制整数。例如链表1→0→1对应的二...

力扣5:中心扩散法 轻松破解最长回文子串

力扣5:中心扩散法 轻松破解最长回文子串

题目解读:在一个给定的字符串中,我们需要找到最长的回文子串。回文是指正读反读都相同的字符串,如"aba"、"abba"都是回文。这个问题看似简单,但要在字符串中...

力扣226题:翻转二叉树 - 递归解法详解

力扣226题:翻转二叉树 - 递归解法详解

内容简介本文详细解析了力扣226题"翻转二叉树"的递归解法。通过递归遍历二叉树的每个节点并交换其左右子树,实现了二叉树的完全翻转。文章包含完整注释代码、算法思路讲解和复杂度分析,帮...

发表评论

访客

看不清,换一张

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