代码随想录算法训练营第二十天 二叉树 java : 654.最大二叉树 617.合并二叉树 700.二叉搜索树中的搜索 98.验证二叉搜索树

news2024/11/25 11:25:22

LeetCode 654.最大二叉树

题目讲解

思路

  • 二叉树的根是最大值
  • 左子树最大值左边部分构造的最大二叉树
  • 右子树最大值是右边部分构造的最大二叉树

在这里插入图片描述

AC代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        return constructMaximumBinaryTree1(nums,0,nums.length);

    }
    public TreeNode constructMaximumBinaryTree1(int[]nums, int leftIndex,int rightIndex)
    {
        if( rightIndex-leftIndex <1)
        {
            return null;
        }
        if( rightIndex-leftIndex==1)
        {
            return  new TreeNode(nums[leftIndex]);
        }
        int maxIndex=leftIndex;
        int maxVal= nums[maxIndex];
        for(int i=leftIndex+1;i<rightIndex;i++)
        {
            if( nums[i]>maxVal)
            {
                maxVal =nums[i];
                maxIndex =i;
            }
        }
       TreeNode root= new TreeNode ( maxVal);
       root.left= constructMaximumBinaryTree1(nums,leftIndex,maxIndex);
       root.right =constructMaximumBinaryTree1(nums,maxIndex+1,rightIndex);
       return root;
    }
}

LeetCode 617.合并二叉树

题目讲解

难点

如何同时操作两个二叉树

代码实现简单到不行
在这里插入图片描述

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
      if( root1 ==null)
      {
          return root2;
      }
      if( root2==null)
      {
          return root1;
      } 
      root1.val += root2.val;
      //左边
      root1.left = mergeTrees( root1.left,root2.left);
      //右边
      root1.right =mergeTrees(root1.right,root2.right);
      return root1;
    }
}

Leetcode 700.二叉搜索树中的搜索

题目讲解

思路

二叉搜索树是一个有序树:

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉搜索树
    在这里插入图片描述
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
      //运用搜索树的特点
      if( root == null || root.val ==val)
      {
          return root;
      }
      if( val<root.val )
      {
          return searchBST(root.left,val);
      }
      else {

      return searchBST(root.right,val);
    }
    }
}

Leetcode 98.验证二叉搜索树

题目讲解

思路

遇到搜索树要记得用上中序遍历 可以验证
在结束条件那块 if( root ==null) return 回去的应该是 boolean类型的true 因为
null 也是二叉搜索树

AC代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    //递归
    TreeNode max;
    public boolean isValidBST(TreeNode root) {
     if(root==null)
     {
         return true; //null也是二叉树
     }
     //  左
     boolean left = isValidBST(root.left);
     if(!left )
     {
         return false;
     }
     //中
     if( max !=null && root.val <= max.val )
     {
         return false;
     }
     max =root;
   
    //右边
    boolean right =isValidBST(root.right);
    return right;


    }
}

总结

昨天家里来人了 延迟了一天晚上还得补今天的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/168123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可视化监控告警-grafana

需求背景 根据我们的业务背景&#xff0c;需要监控3个纬度。 Iaas层&#xff1a;即腾讯云的基础设施CVMPaas层&#xff1a;即使用的腾讯云Paas服务&#xff0c;各种中间件Saas层&#xff1a;即我们本身的服务指标监控。 腾讯云监控&#xff0c;可以覆盖1&#xff0c;2场景, …

HarmonyOS/OpenHarmony应用开发-ArkTS的声明式开发范式

基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、跨设备应用的UI开发框架&#xff0c;支持开发者高效的构建跨设备应用UI界面。 基础能力 使用基于ArkTS的声明式开发范式的方舟开发框架&#xff0c;采用更接近自然语义的编程方式&#xff0c;让开发者可以直…

「自控原理」2.2 控制系统的复域数学模型

本节引入控制模型的复域模型——传递函数&#xff0c;并介绍其构建和使用方法。 本节介绍了几种常见环节的传递函数 文章目录传递函数的定义传递函数的标准形式首1标准型尾1标准型传递函数的性质传递函数的局限性典型环节的传递函数控制系统的复域数学模型是传递函数。拉普拉斯…

深入浅出java并发编程(Thread)

快速了解 package java.lang;public class Thread implements Runnable {}Thread是lang包下的一个类&#xff0c;实现了Runnable接口。源码如下 FunctionalInterface public interface Runnable {public abstract void run(); }Runnable是一个函数式接口不会抛出异常没有返回…

Minecraft 1.19.2 Fabric模组开发 05.动画效果物品

我们本次在Fabric中实现一个具有动画效果的物品&#xff0c;本次演示的模型代码均在文末给出 效果演示效果演示效果演示 首先&#xff0c;请确保你的开发包中引入了geckolib依赖&#xff0c;相关教程请参考:Minecraft 1.19.2 Fabric模组开发 03.动画生物实体 1.首先我们要使用…

nvidia显卡编码并发session限制破解

对于服务器型显卡&#xff08;比如&#xff1a;Tesla T4、NVIDIA A100等&#xff09;&#xff0c;nvidia显卡编码并发session路数没有限制&#xff0c;对于消费型显卡&#xff08;比如&#xff1a;GeForce RTX 3070、GeForce RTX 3080等&#xff09;,nvidia显卡编码并发session…

Odoo 16 企业版手册 - 财务管理之会计仪表板

会计仪表板 财务管理是任何类型业务不可避免的一部分。无论您经营的业务规模或类型如何&#xff0c;如果财务流程没有得到适当的管理和监控&#xff0c;您将在未来面临严重的财务失败。手动管理所有会计操作不是一个好主意&#xff0c;因为它需要大量的时间和精力。在人工会计管…

esp32 Python开发快速入门--环境配置以及点亮LED灯

esp32 Python开发快速入门--环境配置以及点亮LED灯1. 环境配置2. 固件的烧录3 下面开始点灯1. 环境配置 需要配置两个环境&#xff0c; 开发的IDE Thonny 链接如下 https://thonny.org/ 安装串口助手&#xff0c;芯片是通过串口来实现通信的&#xff0c;需要驱动&#xff0c;…

Openresty宏观概述笔记

最近由于项目需要学习了安全代理的相关知识&#xff0c;其实刚开始的时候是非常需要一个入门的介绍&#xff0c;大概说明下这个到底是个什么东西&#xff0c;能干啥&#xff0c;简单的原理是什么&#xff0c;为此我记录下我看完用完的心得&#xff0c;记录成笔记。 一般我们代码…

Nginx基础01:安装和基本使用

背景Nginx是一个高性能的Web服务器&#xff0c;几乎所有的Web服务都需要使用Nginx。关于Nginx的功能特性这里不再赘述&#xff0c;让我们从0开始&#xff0c;了解Nginx的基本用法&#xff0c;学习它在Web服务中都有哪些应用。本文主要介绍Nginx的安装以及基础的控制命令。Nginx…

讨论| 电视行业已是落日夕阳?

如今&#xff0c;随着移动设备、互联网技术的发展&#xff0c;电视似乎逐渐淡出人们的视野。近期&#xff0c;与电视相关的热门讨论似乎都是对于各大视频平台的会员投屏制度&#xff0c;这似乎更加减少了大众对于电视的使用欲望。那么电视领域是否真的趋于淘汰了呢&#xff1f;…

PASCAL VOC 数据集的标注格式

PASCAL VOC 数据集的标注格式 PASCAL VOC 挑战赛 &#xff08; **The PASCAL Visual Object Classes &#xff09;是一个世界级的计算机视觉挑战赛。 PASCAL的全称是Pattern Analysis, Statistical Modelling and Computational Learning&#xff0c;很多优秀的计算机视觉模型…

区块链知识系列 - 系统学习EVM(一)

EVM有一个基于栈的架构&#xff0c;在一个栈中保存了所有内存数值。EVM的数据处理单位被定义为256位的“字”&#xff08;这主要是为了方便处理哈希运算和椭圆曲线运算操作&#xff09; 这里所说的内存数值是指那些EVM字节码运行所需要的输入、输出参数数据和智能合约程序运行中…

拉伯证券|锂离子动力电池有哪些优缺点?锂离子电池的优缺点详解

锂离子动力电池是20世纪开发成功的新型高能电池。这种电池的负极是石墨等资料&#xff0c;正极用磷酸铁锂、钴酸锂、钛酸锂等。70年代进入实用化。因其具有能量高、电池电压高、工作温度规模宽、贮存寿命长等优点&#xff0c;已广泛应用于军事和民用小型电器中。 锂离子动力电池…

jvm垃圾回收笔记

JVM基础知识笔记 1. 垃圾回收相关算法 标记清除-标记整理-复制 这三个看上面的文章 1.1 分代收集算法 将不同生命周期的对象采用不同的收集方式&#xff0c;以便提高回收效率&#xff0c;一般是将Java堆分为新生代和老年代&#xff0c;这样可以根据各个年代的特点使用不同的…

拉伯证券|A股涨势趋缓,个股分化,北向资金继续“买买买”

今天上午&#xff0c;A股商场涨势趋缓&#xff0c;主要指数涨跌互现。 个股方面也现较大分解&#xff0c;接连涨停股和接连大幅跌落股同时呈现。 值得注意的是&#xff0c;作为近期最为坚定买入A股的力量之一&#xff0c;北向资金今天上午继续“买买买”&#xff0c;上午半个交…

Wider Face+YOLOV7人脸检测

1 Wider Face标注格式转成YOLO格式1.1 Wider Face标注介绍The format of txt ground truth. File name Number of bounding box x1, y1, w, h, blur, expression, illumination, invalid, occlusion, pose0--Parade/0_Parade_marchingband_1_849.jpg 1 449 330 122 149 0 0 0 0…

Java开发 - Spring Test知多少?

前言 在前文中&#xff0c;我们也使用了测试代码来进行简单的单元测试&#xff0c;但是我们会发现&#xff0c;里面有大量的重复代码&#xff0c;实际给我们的体验并不是太好&#xff0c;所以这篇&#xff0c;我们来学习Spring Test&#xff0c;Spring Test不仅仅限于在Mybati…

AUTOSAR RTE 总结

1. Interface和在Interface下面包含哪些data element在SWC创立之前就定义好了&#xff0c;存储在一个arxml文件里面&#xff0c; 它相当于一个库文件&#xff0c;在新建AUTOSAR project的第一步就应该被导入进来 2. port在SWC创建的阶段被create&#xff0c;因为Interface没有…

某博数据挖掘:使用Scrapy构建自定义数据采集提取洞察信息

想要深入了解某博上最新的动态和信息吗?那么学习如何使用Scrapy构建一个某博数据采集将是不二之选。Scrapy是一个强大的框架,能够快速地爬取网站上的数据。 新版API构建的某博数据采集拥有最丰富的字段信息,能够更好地深入挖掘某博上的数据。提供了多种采集模式,包括用户、…