当前位置:首页 > 力扣 > 力扣第654题:最大二叉树解题教程 用数组构造最大二叉树

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

4个月前 (05-21)

力扣第654题:最大二叉树解题教程 用数组构造最大二叉树 二叉树 算法 C++ 力扣 递归 分治 数组 动态数组 STL 第1张

题目解读

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


解题思路与过程

用递归和分治的方法来构建最大二叉树。定义一个辅助函数maxbinarytree来处理子数组的构建过程。当子数组为空时返回空指针,否则找到当前子数组的最大值作为根节点值,并记录其索引位置。然后递归构建左子树(使用最大值左侧的子数组)和右子树(使用最大值右侧的子数组)。主函数constructMaximumBinaryTree初始化整个构建过程,传入整个数组和初始边界。


代码实现与注释

class Solution {
public:
    // 递归构建最大二叉树的辅助函数
    TreeNode* maxbinarytree(vector<int>& nums, int l, int r) {
        if (r - l == 0)  // 基本情况:子数组为空
            return nullptr;
            
        TreeNode* root = new TreeNode(0);  // 创建新节点
        int maxidx = l;  // 初始化最大值索引
        
        // 遍历当前子数组,找到最大值及其索引
        for (int i = l; i < r; i++) {
            root->val = max(root->val, nums[i]);
            if(root->val == nums[i])
                maxidx = i;
        }
        
        // 递归构建左子树和右子树
        root->left = maxbinarytree(nums, l, maxidx);
        root->right = maxbinarytree(nums, maxidx + 1, r);
        
        return root;  // 返回当前构建的子树
    }
    
    // 主函数:初始化最大二叉树构建过程
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return maxbinarytree(nums, 0, nums.size());
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

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

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

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

力扣965题深度解析:单值二叉树的判断技巧

力扣965题深度解析:单值二叉树的判断技巧

重新解读题目 判断一棵二叉树是否为“单值二叉树”,即所有节点的值是否完全相同。题目看似简单,实则考验对树结构递归特性的理解。若一棵树的所有节点值相同,其必然满足:根节点与左右子树的值一致,且...

牛客14496题解:括号最大深度问题(栈思想与代码优化)

牛客14496题解:括号最大深度问题(栈思想与代码优化)

一、题目解读牛客14496题要求计算给定括号字符串中的最大深度。例如,对于字符串 "(()())",最大深度为2。题目考察对括号嵌套结构的理解,以及如何通过编程找到最深嵌套层次。二...

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

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

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

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

【洛谷1184题解析】用C++高效解决地点匹配问题(附代码与解题思路)

一、题目解读洛谷1184题要求处理一组地点列表与行程记录,统计其中匹配的天数。题目难点在于高效处理带有空格的字符串输入,以及快速判断每日行程是否在高手可去地点集合中。需要兼顾输入格式解析与算法效率。二...

牛客NC67题解:汉诺塔递归算法与解题步骤

牛客NC67题解:汉诺塔递归算法与解题步骤

一、题目解读牛客NC67题要求解决汉诺塔问题,这是一个经典的递归算法题目。题目给定整数n,代表汉诺塔中的盘子数量,需要输出将n个盘子从起始柱移动到目标柱的所有步骤。汉诺塔问题规则为:每次只能移动一个盘...

发表评论

访客

看不清,换一张

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