当前位置: 首页 > news >正文

【二叉树】最大二叉树 II

题目描述

最大树 定义:一棵树,并满足:其中每个节点的值都大于其子树中的任何其他值。

给你最大树的根节点 root 和一个整数 val 。

给定的树是利用 Construct(a) 例程从列表 a(root = Construct(a))递归地构建的:

  • 如果 a 为空,返回 null 。
  • 否则,令 a[i] 作为 a 的最大元素。创建一个值为 a[i] 的根节点 root 。
  • root 的左子树将被构建为 Construct([a[0], a[1], ..., a[i - 1]]) 。
  • root 的右子树将被构建为 Construct([a[i + 1], a[i + 2], ..., a[a.length - 1]]) 。
  • 返回 root 。

示例1:

输入:root = [4,1,3,null,null,2], val = 5
输出:[5,4,null,1,3,null,null,2]
解释:a = [1,4,2,3], b = [1,4,2,3,5]

解题思路

这道题最难的是理解题目,看了半天没有理解这道题,最后是看了别人的代码实现才知道要怎么做的。

其实就是在树中添加节点:

case1:  val > root.val 

 

case2:  val < node.val  && val > node.right.val

 case3: val < node.val && node.right == null

 

这里直接使用dfs做树的遍历就可以了,dfs遍历代码如下:


import org.example.TreeNode;

class Solution {
    public TreeNode insertIntoMaxTree(TreeNode root, int val) {

        if (val > root.val) {
            TreeNode node = new TreeNode(val);
            node.left = root;
            return node;
        }

        dfs(root, val);
        return root;
    }

    private void dfs(TreeNode root, int val) {

        if (root.right != null && root.right.val < val) {
            root.right = new TreeNode(val, root.right, null);
        } else if (root.right == null) {
            root.right = new TreeNode(val);
        } else {
            root = root.right;
            dfs(root, val);
        }
    }
}

 

总结

这道题是中等难度,重点是理解题目要求,如果有更好的题目描述、更高效更简洁的代码实现欢迎回复。

相关文章:

  • java毕业设计小说网站mybatis+源码+调试部署+系统+数据库+lw
  • 【每日一题】 和为 K 的子数组
  • 【初认Redis】
  • HTTP之Hop-by-hop首部
  • 指标体系搭建-专项1
  • 尚好房 10_Spring Security
  • JDK RMI探索与使用--序列化
  • Self-supervised Low Light Image Enhancement and Denoising 论文阅读笔记
  • hive窗口函数(开窗函数)
  • SpringMVC:整合SSM
  • 【每日一题】路径总和 III
  • 【Vue】基础系列(三三)指令语法-事件及其修饰符,动态样式,v-model的用法,数据持久化存在本地localStorage
  • 01_JSON的理解
  • 3D感知技术(3)双目立体视觉测距
  • spring学习第二天_Spring Ioc(1)
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 03Go 类型总结
  • 11111111
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • Angular 响应式表单之下拉框
  • Mithril.js 入门介绍
  • Python3爬取英雄联盟英雄皮肤大图
  • 从零搭建Koa2 Server
  • 分享一份非常强势的Android面试题
  • 服务器之间,相同帐号,实现免密钥登录
  • 关于使用markdown的方法(引自CSDN教程)
  • 汉诺塔算法
  • 利用DataURL技术在网页上显示图片
  • 浅谈JavaScript的面向对象和它的封装、继承、多态
  • 数据仓库的几种建模方法
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • const的用法,特别是用在函数前面与后面的区别
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • #NOIP 2014# day.2 T2 寻找道路
  • #pragma data_seg 共享数据区(转)
  • #经典论文 异质山坡的物理模型 2 有效导水率
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • (4.10~4.16)
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (转)C#调用WebService 基础
  • (转载)hibernate缓存
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET Core日志内容详解,详解不同日志级别的区别和有关日志记录的实用工具和第三方库详解与示例
  • .net 程序发生了一个不可捕获的异常
  • .NET 简介:跨平台、开源、高性能的开发平台
  • .NET 药厂业务系统 CPU爆高分析
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • .net6Api后台+uniapp导出Excel
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .考试倒计时43天!来提分啦!
  • :如何用SQL脚本保存存储过程返回的结果集