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

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

5天前


力扣94:递归之美 轻松掌握二叉树中序遍历 力扣 C++ 二叉树遍历 二叉树 算法 中序遍历 第1张题目解读

二叉树中序遍历是一种基础且重要的树遍历方式,其遍历顺序为:先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。对于二叉搜索树,中序遍历的结果恰好是节点值的升序排列。给定一个二叉树的根节点,我们需要按照这个顺序访问所有节点,并将它们的值存储在一个列表中返回。这个问题虽然简单,但却是理解更复杂树算法的基础。


解题思路与过程

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


代码实现与注释

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



原创内容 转载请注明出处

分享给朋友:

相关文章

力扣912排序题终极解法:递归分割 + 双指针合并详解

力扣912排序题终极解法:递归分割 + 双指针合并详解

题目解读给定一个整数数组,要求将其按升序排列并返回。题目通常隐含对算法时间复杂度的要求,理想情况下需实现 O(n log n) 的时间复杂度。本题看似简单,但需要选择合适的排序算法(如归并排序、快速排...

力扣第1984题精解:如何通过排序将时间复杂度优化到O(n log n)?

力扣第1984题精解:如何通过排序将时间复杂度优化到O(n log n)?

题目解读给定一个整数数组和一个整数 k,需要找到所有大小为 k 的子数组中最大值与最小值的差值的最小值。例如,数组 [9,4,1,7] 中若 ...

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

力扣LCR182:字符串操作三连 从基础拼接到底层指针优化

题目重解需要将密码字符串从第target个字符开始进行重新排列,形成新的动态密码。例如输入"password"和target=3,结果应为"swordpas"。...

用栈结构优雅破解括号匹配难题(力扣20题)

用栈结构优雅破解括号匹配难题(力扣20题)

一、题目重新解读给定一个仅包含 ('、')、'['、']'、'{'、'}' 的字符串,判断其是否有效。有效需满足:1....

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

力扣1221:一次扫描解决分割平衡字符串 时间O(n)空间O(1)

题目重解给定一个仅包含'L'和'R'的字符串,要求将其分割成尽可能多的子串,且每个子串中'L'和'R'的数量相等。例如输入"R...

力扣第71题:用栈轻松解决Unix路径简化问题

力扣第71题:用栈轻松解决Unix路径简化问题

题目解读:在Unix风格的文件系统中,我们经常需要处理各种复杂的路径表示。给定一个绝对路径字符串,我们需要将其转换为最简化的规范路径。规范路径要求:路径始终以斜杠'/'开头;两个目录名...

发表评论

访客

看不清,换一张

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