LeetCode --- 最大二叉树

LeetCode 0654.最大二叉树【Go】 LeetCode 0654.最大二叉树 阅读详情

给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:

二叉树的根是数组中的最大元素。
左子树是通过数组中最大值左边部分构造出的最大二叉树。
右子树是通过数组中最大值右边部分构造出的最大二叉树。
通过给定的数组构建最大二叉树,并且输出这个树的根节点。

Example 1:
输入: [3,2,1,6,0,5]
输出: 返回下面这棵树的根节点:

  6
/   \
3     5
\    / 
 2  0   
   \
    1

注意:

给定的数组的大小在 [1, 1000] 之间。


public class constructMaximumBinaryTree {

    @Test
    public void constructMaximumBinaryTreeTest() {
        int[] nums = new int[]{3,2,1,6,0,5};
        TreeNode treeNode = constructMaximumBinaryTree(nums);
        Assert.assertEquals(6 , treeNode.val);
        Assert.assertEquals(3, treeNode.left.val);
        Assert.assertEquals(5, treeNode.right.val);
        Assert.assertEquals(null, treeNode.left.left);
        Assert.assertEquals(2, treeNode.left.right.val);
        Assert.assertEquals(null, treeNode.left.right.left);
        Assert.assertEquals(1, treeNode.left.right.right.val);
        Assert.assertEquals(0, treeNode.right.left.val);
        Assert.assertEquals(null, treeNode.right.right);
    }

    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        TreeNode(int x) { val = x; }
    }

    public TreeNode constructMaximumBinaryTree(int[] nums) {
        if (nums == null || nums.length == 0) return null;
        int maxInt = Arrays.stream(nums).max().getAsInt();
        TreeNode root = new TreeNode(maxInt);
        int[] left = getLeftArray(nums, getIndexInArray(nums, maxInt));
        int[] rigt = getRightArray(nums, getIndexInArray(nums, maxInt));
        root.left = constructMaximumBinaryTree(left);
        root.right = constructMaximumBinaryTree(rigt);
        return root;
    }

    @Test
    public void getLeftArrayTest() {
        int[] nums = new int[]{3,2,1,6,0,5};
        Assert.assertArrayEquals(new int[]{3,2,1}, getLeftArray(nums, 3));
    }

    private int[] getLeftArray(int[] nums, int index) {
        if (index == -1) {
            return null;
        }
        int[] left = new int[index];
        Arrays.setAll(left, i -> nums[i]);
        return left;
    }

    @Test
    public void getRightArrayTest() {
        int[] nums = new int[]{3,2,1,6,0,5};
        Assert.assertArrayEquals(new int[]{0,5}, getRightArray(nums, 3));
    }

    private int[] getRightArray(int[] nums, int index) {
        if (index == -1) {
            return null;
        }
        int[] right = new int[nums.length - index - 1];
        Arrays.setAll(right, i -> nums[index + i + 1]);
        return right;
    }

    @Test
    public void getIndexInArrayTest() {
        int[] nums = new int[]{3,2,1,6,0,5};
        Assert.assertEquals(3, getIndexInArray(nums, 6));
    }

    private int getIndexInArray(int[] nums, int maxInt) {
        for (int i = 0; i < nums.length; i++) {
            if (maxInt == nums[i]) {
                return i;
            }
        }
        return -1;
    }

}
【困难】力扣算法题解析LeetCode124:二叉树中的最大路径和 题目要求计算二叉树中的最大路径和,路径定义为节点序列,节点至多出现一次。通过深度优先搜索(DFS)和动态规划思想解决: 递归遍历:计算左右子树的贡献值(若为负则舍弃)。 更新最大值:当前节点作为路径转折点时的和(节点值 + 左贡献 + 右贡献)。 返回单边最大和:供父节点拼接路径。 时间复杂度O(N),空间复杂度O(N)(递归栈)。 代码实现:维护全局变量maxSum,递归函数返回单边路径和,动态更新最大值。 阅读详情

相关推荐

NCBI|叶绿体基因组数据上传

叶绿体基因组NCBI上传 小编最近在NCBI上传了好几次数据…想着可以把具体的上传步骤写下来,供大家参考。以下是叶绿体基因组的上传示例,大家可以瞅瞅 图片 准备工作 1.登录NCBI官网:https://www.ncbi.nlm.nih.gov/, 依次点击“sign in to NCBI”——“See more 3rd party sign in options”——搜索“Microsoft live.com”。 ”sign in to NCBI“ ”See more 3rd party sign i

weifanbio的博客 3900

Leetcode 654.最大二叉树

Leetcode 654.最大二叉树

weixin_44852067的博客 538

一文讲透 .claude/ 文件夹:Claude Code 团队配置指南和最佳实践

本文系统梳理了ClaudeCode配置框架,旨在解决实际落地中的常见困惑。文章从五层作用域体系(组织策略、命令行参数、本地覆盖、项目级、用户级)切入,详细解析了CLAUDE.md、rules、skills、agents等核心组件的定位与配合关系。重点强调了"确定性规则"与"概率性建议"的分层设计:权限控制和安全边界应通过settings.json和hooks实现,而工作约定和编码规范适合放在CLAUDE.md。文中提供了可直接套用的最小配置方案,并总结了10大常见踩坑

977

leetcode刷题:最大二叉树

最大二叉树题目描述一、解题思路二、c++代码实现总结 题目描述     给定一个不含重复元素的整数数组 nums 。一个以此数组直接递归构建的 最大二叉树 定义如下:     1.二叉树的根是数组 nums 中的最大元素。     2.左子树是通过数组中 最大值左边部分 递归构造出的最大二叉树。     3.右子树是通过数组中 最大值右边部分 递归构造出的最大二叉树。 示例 1: 输入:nums = [3,2,1,6,0,5] 输出:[6,3,5,null,2,0,null,null,1] 示例2: 输入

weixin_42198087的博客 295

Ubuntu20.04 高效安装企业微信的完整指南

本文提供了在Ubuntu20.04系统上高效安装企业微信的完整指南,详细介绍了通过Deepin-wine环境运行Windows版企业微信的步骤和优化技巧。内容包括系统环境检查、依赖安装、企业微信包的获取与安装、首次运行配置及常见问题解决方案,帮助开发者在Ubuntu系统中流畅使用企业微信进行办公通讯。

weixin_42568801的博客 351

使用IntelliJ IDEA配置版本管理(SVN和Git)

在开发过程中,版本管理是必不可少的一部分,它可以帮助团队协作、管理代码历史记录,并且提供了代码回滚和分支管理等功能。本文将介绍如何使用IntelliJ IDEA配置版本管理,包括SVN和Git两种方式,另外列举了常见的问题并指导修复,以帮助开发者更高效地进行代码管理和协作。

2870

「leetcode」654.最大二叉树(详解)

用数组构建二叉树都是一样的套路

代码随想录 693

STM32多模式智能小车状态机设计与中断优先级实践

在嵌入式实时系统中,状态机是实现多任务协同与功能切换的核心范式。其本质是通过有限状态集合、明确转移条件和确定性动作,构建可预测、易维护的控制逻辑。基于STM32等资源受限MCU时,需兼顾状态调度效率、中断并发安全与硬件资源约束。关键技术价值体现在:提升系统模块解耦度、支持物理按键与蓝牙双源触发、保障实时响应不丢帧。典型应用场景包括智能小车多模运行(循迹、避障、遥控、定距跟随等)、工业设备工作模式切换及IoT终端低功耗状态管理。本文以STM32F103C8T6平台为例,深入解析全局模式变量设计、双通道状态切换

weixin_42509888的博客 93

LeetCode--最大二叉树

题目描述: 解题思路:以数组中最大值为中心,分为左右两段,再递归遍历左右两段,注意避免空指针与空数组。 class Solution { public static TreeNode constructMaximumBinaryTree(int[] nums) { int [] shuju = new int[2]; //定义数组shuju shuj...

weixin_43502661的博客 217

STM32嵌入式标准化封装五层架构设计与工程实践

在嵌入式系统开发中,代码封装是保障可维护性、可复用性与可靠性的核心工程能力。其本质是通过分层抽象(硬件抽象层→设备驱动层→应用逻辑层)解耦硬件依赖与业务逻辑,实现跨芯片移植、多任务安全及确定性实时响应。关键技术包括HAL库重构以消除硬编码初始化、驱动层提供同步/异步/事件驱动三类UART接口、中断优先级矩阵管理确保响应确定性、双阶段时钟配置兼顾启动鲁棒性与运行能效,以及面向Modbus等工业协议的语义化API封装。这些实践直击STM32项目中引脚变更难、HAL裸调风险高、中断处理不安全、时钟配置僵化等典型痛

weixin_35019679的博客 68

【3D Slicer】的小白入门使用指南一

3D Slicer 是一个免费的开源软件平台,用于医学、生物医学和其他 3D 图像的可视化、处理、分割、配准和分析。Slicer 的功能包括:读/写。

图挖掘领域,新晋砖家 ☞ 未来可期,欢迎和静静一起学习交流吖 5554

力扣的二叉树的最大深度解法(Python3)

力扣的二叉树的最大深度解法 题目描述: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/...

chutu2018的博客 291

fasterlio原理及代码框架梳理

Faster-LIO 的优势是在保持同等高精度的前提下,显著提升计算效率,以支持更极端的应用场景(如高速无人机)和更廉价的硬件平台。可以把 Faster-LIO 理解为用一把更快的“空间哈希筛子”(iVox)替换了原来精细的“动态平衡树”(ikd-Tree),从而在精度损失极小的情况下,实现了效率的显著提升。:只在实际有地图点的空间区域动态创建和保留体素单元,形成一个稀疏的体素地图。是关键:将去畸变点云中的每个点,在 iVox 维护的局部地图中搜索近邻(如5个最近点),构建点到面的距离残差。

Studying…… 246

瑞_力扣LeetCode_104. 二叉树的最大深度

力扣LeetCode_104. 二叉树的最大深度

阿瑞——从事Java后端,喜欢研读源码、自研框架、分享经验 1229

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

104. 二叉树的最大深度【 力扣(LeetCode) 】

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。给定一个二叉树 root ,返回其最大深度。【h 是树高,递归最高深度就是树高】

yyh520025的博客 1331

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

654. 最大二叉树 - 力扣(LeetCode)

给定一个不重复的整数数组。最大二叉树 _**。

... 178

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

LeetCode:二叉树的最大深度(Python版本)

LeetCode刷题日记二叉树的最大深度Python代码 二叉树的最大深度 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 Python代码 # Definition for a binary tree node. #...

Cassiel_Coder的博客. 475

《LeetCode力扣练习》第104题 二叉树的最大深度 Java

《LeetCode力扣练习》第104题 二叉树的最大深度 Java 一、资源 题目: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / 9 20 / 15 7 返回它的最大深度 3 。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/maximum-depth-of-bina

XRT_knives的博客 225

力扣LeetCode #124 二叉树中的最大路径和(maxPathSum)

- 题目描述 路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。 提示: 树中节点数目范围是 [1, 3 * 104] -1000 <= Node.val <= 1000 来源:LeetCode - 示例 示例 1: 输入:root = [1,2,3] 输出:6 解释:最优路径是

weixin_49155948的博客 304

力扣654 最大二叉树

给定一个不重复的整数数组 nums。输出:[6,3,5,null,2,0,null,null,1]递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右边 的 子数组后缀上 构建右子树。创建一个根节点,其值为 nums 中的最大值。输入:nums = [3,2,1,6,0,5]返回 nums 构建的 最大二叉树。拜完亲戚以后,你加入族谱。我比你大,你做我右儿子。我比你小,我做你左儿子。

qq_51931826的博客 394

Leetcode 124. 二叉树中的最大路径和

题目 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-maximum-path-sum 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解答 递...

LetJava的博客 589

力扣练习第三十天——二叉树的最大路径和

力扣练习第三十天——二叉树的最大路径和 题目大致如下: 给定一个非空二叉树,返回其最大路径和。 本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。 示例一: 示例二: 链接来源于LeetCode: 大致思路: 代码如下: 结果: ...

weixin_43873644的博客 292

【力扣LeetCode】104 二叉树的最大深度

题目描述(难度易) 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 返回它的最大深度 3 。 链接 https://leetcode-cn.com/problems/maximum-depth-of-binary-tree/ 思路 1、通过递归...

Jiewang的博客 351

662.力扣LeetCode_二叉树最大宽度

本文提出了一种基于层序遍历的二叉树最大宽度计算方法。通过维护节点的虚拟索引,并对每层索引进行偏移处理,有效避免了无符号整数溢出的风险。算法使用队列进行层序遍历,记录每层最左和最右节点的索引差值来计算层宽度,最终返回最大宽度值。关键点包括:1) 使用虚拟索引跟踪节点位置;2) 层内索引偏移处理;3) 队列实现层序遍历。该方法时间复杂度为O(n),空间复杂度为O(n),能正确处理32位整数范围内的宽度计算。

2401_82472941的博客 300

二叉树的最大深度,力扣

是指从根节点到最远叶子节点的最长路径上的节点数。

m0_70437378的博客 1238

力扣练习第二十七天——二叉树的最大深度

力扣练习第二十六天——二叉树的最大深度 题目大致如下: 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7] 返回它的最大深度 3 。 链接来源于LeetCode:https://leetcode-cn.com/problems/maximum-dept...

weixin_43873644的博客 251
上一篇: LeetCode -- 保持城市天际线
下一篇: LeetCode ----- 汉明距离
袁小黑
博客等级 码龄15年 57粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值