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

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

9个月前 (05-24)


力扣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;     // 返回遍历结果
    }
};



原创内容 转载请注明出处

分享给朋友:

相关文章

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

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

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

力扣540题:线性扫描法如何高效定位唯一数

力扣540题:线性扫描法如何高效定位唯一数

题目重解一个严格递增的有序数组中,除某个元素外,其余每个元素均出现两次。这个看似简单的条件背后隐藏着巧妙的规律——单一元素会打破数组的"成对对称性"。题目要求以O(log n)时间...

标题:洛谷B3617题解析:八进制转十六进制算法实现与优化(附AC100代码)

标题:洛谷B3617题解析:八进制转十六进制算法实现与优化(附AC100代码)

一、题目解读洛谷B3617题要求将输入的八进制字符串转换为十六进制表示。题目需处理大数场景,且对输入合法性有明确限制(长度不超过1000,仅包含0-7字符)。由于八进制与十六进制无法直接转换,需借助十...

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

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

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

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

力扣3112题解法:带时间限制的最短路径问题解析(C++代码)

一、题目解读力扣3112题要求解决带时间限制的最短路径问题:给定一个有向图,节点具有消失时间,需计算从起点到各节点的最短路径,且路径总时间不能超过节点的消失时间。题目难点在于需在传统最短路径算法(如D...

洛谷1656题解:基于Tarjan算法求解割边问题(附代码与详细步骤)

洛谷1656题解:基于Tarjan算法求解割边问题(附代码与详细步骤)

一、题目解读洛谷1656题要求在无向图中找出所有割边(即删除后导致图不连通的边)。题目核心在于判断图的连通性,并识别哪些边是“桥”。需理解图论中的连通分量概念,以及如何通过算法高效定位割边。二、解题思...

发表评论

访客

看不清,换一张

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