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

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

1周前 (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());
    }
};


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

力扣451:ASCII数组计数法 用128个桶解决频率排序问题

题目重解给定一个字符串,将字符按照出现频率降序排列。例如输入"tree",可能返回"eetr"或"eert"。题目要求我们不考虑字母顺序,只...

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

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

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

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

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

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

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

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

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

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

【深度优先搜索实战】力扣547题:省份数量问题的图论解法

题目解读‌我们面对的是一个典型的图论问题:给定一个城市的连接矩阵,需要计算其中相互连通的城市群(省份)数量。这个问题可以抽象为无向图中的连通分量计算,每个城市代表图中的一个节点,城市之间的连接关系代表...

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

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

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

发表评论

访客

看不清,换一张

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