代码随想录算法刷题训练营day20

代码随想录算法刷题训练营day20:LeetCode(654)最大二叉树、LeetCode(617)合并二叉树、LeetCode(700)二叉搜索树中的搜索、LeetCode(700)二叉搜索树中的搜索、LeetCode(98)验证二叉搜索

LeetCode(654)最大二叉树
题目
在这里插入图片描述

代码

import java.util.Arrays;

/**
 * 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) {
        //递归----判断终止条件
        if(nums.length==0){
            return null;
        }
        int data[]=getMaxIndexAndValue(nums);
        int dataIndex=data[0];
        int dataValue=data[1];
        TreeNode root=new TreeNode(dataValue);
        //拆分数组
        int[] leftNums=Arrays.copyOfRange(nums, 0, dataIndex);
        int[] rightNums=Arrays.copyOfRange(nums, dataIndex+1, nums.length);
        root.left=constructMaximumBinaryTree(leftNums);//左边构建左子树
        root.right=constructMaximumBinaryTree(rightNums);//右边构建右子树
        return root;
    }
    //定义一个函数用于获取数组中的最大值和对应的数组下标
    public int[] getMaxIndexAndValue(int[] nums){
        int[] result=new int[2];
        int index=0;
        int sum=0;
        for (int i = 0; i < nums.length; i++) {
            if(nums[i]>sum){
                sum=nums[i];
                index=i;
            }    
        }
        result[0]=index;
        result[1]=sum;//记住最大值的下标和对应的值
        return result;
    }
}

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&&root2==null){
            return null;
        }
        if(root1==null&&root2!=null){
            return root2;
        }
        if(root1!=null&&root2==null){
            return root1;
        }
        TreeNode root=getMergeTrees(root1,root2);
        return root;
    }
    //单独构建一个函数用于处理
    public TreeNode getMergeTrees(TreeNode root1,TreeNode root2){
        //终止条件
        if(root1==null&&root2==null){
            return null;
        }
        /* if(root1==null){
            return root2;//树1为空即返回树2
        }
        if(root2==null){
            return root1;
        } */
        TreeNode root=new TreeNode();
        if(root1!=null&&root2==null){
            /* root.val=root1.val;
            return root; *///还会往下面走,所以空指针异常
            /* root.val=root1.val; */
            return root1;//树二已经没有了,需要把树1所有子树全部返回
            //
        }

        if(root1==null&&root2!=null){
            /* root.val=root2.val;
            return root; */
            return root2;
        }
        //先序遍历----同时遍历到同一位置
        
        if(root1!=null&&root2!=null){
            int data=root1.val+root2.val;
            root.val=data;
        }

        
        //左子树遍历
        
        root.left=getMergeTrees(root1.left, root2.left);
        //右子树遍历
        root.right=getMergeTrees(root1.right, root2.right);
        return root;
    }
}

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){
            return null;
        }
        //前序遍历

        if(root.val==val){
            return root;
        }
        TreeNode result=new TreeNode();
        //左边
        //左子树
        //二叉搜索树
        //左边小于中间,右边大于中间
        if(val<root.val){
            //往左边走
            result=searchBST(root.left, val);
        }
        if(val>root.val){
            //右子树
            result=searchBST(root.right, val);
        }
        return result;

    }
}

LeetCode(98)验证二叉搜索
题目
在这里插入图片描述

代码

import java.util.ArrayList;
import java.util.List;

/**
 * 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 boolean isValidBST(TreeNode root) {
        //定义一个集合,遍历树存储到集合里面
        //按中序遍历存储数据,若是二叉搜索树,则是一个升序数组
        List<Integer> dateTree=new ArrayList<>();
        getDateTree(root,dateTree);
        for (int i = 0; i < dateTree.size()-1; i++) {
            if(dateTree.get(i)>=dateTree.get(i+1)){
                return false;
            }   
        }
        return true;
    }
    public void getDateTree(TreeNode root,List<Integer> dateTree){
        if(root==null){
            return;
        }
        getDateTree(root.left, dateTree);//左子树
        dateTree.add(root.val);
        getDateTree(root.right, dateTree);//右子树
    }
    
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB有限元应用-四边形八节点梁受力弯曲

MATLAB在处理平面有限元问题和梁弯曲问题上有很强的能力,主要体现在以下几个方面: 建模与网格划分 MATLAB内置了方便的图形界面工具(pdetoolbox等),可以快速对几何模型进行二维三维网格划分,生成有限元分析需要的网格。 求解器 MATLAB内置了多种求解偏微分方程的有限元求解器…

大模型重塑车载语音交互:赛道巨头如何引领新周期?

车载语音交互赛道正进入新一轮竞争周期。 高工智能汽车注意到&#xff0c;传统车载语音交互赛道当前基本已进入成熟期&#xff0c;主要为任务型助手&#xff0c;包括从单轮对话到多轮对话&#xff0c;单音区到多音区&#xff0c;从单一的导航、多媒体娱乐等座舱功能扩展智能驾…

钢材表面缺陷YOLOV8,OPENCV调用

【免费】钢材表面缺陷YOLOV8资源-CSDN文库 钢材表面缺陷YOLOV8NANO&#xff0c;训练得到PT模型&#xff0c;然后转换成ONNX&#xff0c;OPENCV的DNN调用&#xff0c;支持C,PYTHON,ANDROID

VScode中使用Xdebug调试PHP

君衍. 一、下载VScode与PHPstudy二、配置PHP环境变量三、PHPstudy中启用xdebug扩展四、打开php.ini&#xff0c;修改配置五、修改vscode配置六、VScode安装相关插件七、配置launch.json八、设置断点&#xff0c;开始调试 一、下载VScode与PHPstudy 首先我们自然是需要搭建环境…

C++ 数论相关题目 博弈论 Nim游戏

给定 n 堆石子&#xff0c;两位玩家轮流操作&#xff0c;每次操作可以从任意一堆石子中拿走任意数量的石子&#xff08;可以拿完&#xff0c;但不能不拿&#xff09;&#xff0c;最后无法进行操作的人视为失败。 问如果两人都采用最优策略&#xff0c;先手是否必胜。 输入格式…

《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第5章 决策树(代码python实践)

文章目录 第5章 决策树—python 实践书上题目5.1利用ID3算法生成决策树&#xff0c;例5.3scikit-learn实例 《统计学习方法&#xff1a;李航》笔记 从原理到实现&#xff08;基于python&#xff09;-- 第5章 决策树 第5章 决策树—python 实践 import numpy as np import pand…

Docusaurus 文档侧边栏增加 New 标识

在使用 Docusaurus 搭建文档站点的时候&#xff0c;我们经常要给某个侧边栏菜单增加一些醒目的标识&#xff0c;比如针对新创建的文档给它一个 New 的标识&#xff0c; 以提醒过来看文档的用户这是一个新增加项或者新特性&#xff08;阅读的时候不要遗漏&#xff09;。 然而这个…

C#: form 添加窗体最小化事件,添加系统托盘图标,点击后可以打开、最小软件窗口

说明&#xff1a; 1.实现窗体在最小化后触发一个事件&#xff0c;可以去实现需要的功能。 2.最小化后软件图标出现在系统右下角的托盘串口。 3.点击托盘口的图标可以实现软件弹出窗口和最小化的切换。 1.参考办法 以下是判断C#窗体最小化到状态栏的状态的方法&#xff1a;…

[AI]文心一言爆火的同时,ChatGPT带来了这么多的开源项目你了解吗

前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言4.5key价格泄漏ChatGPT4.0使用地址ChatGPT正确打开方式最新功能语音助手存档…

Redis核心技术与实战【学习笔记】 - 7.Redis GEO类型 - 面向 LBS 应用的数据类型

前言 前面&#xff0c;介绍了 Redis 的 5 大基本数据类型&#xff1a;String、List、Hash、Set、Sorted Set&#xff0c;它们可以满足绝大多数的数据存储需求&#xff0c;但是在面对海里数据统计时&#xff0c;它们的内存开销很大。所以对于一些特殊的场景&#xff0c;它们是无…

计算机网络-物理层设备(中继器 集线器)

文章目录 中继器中继器的功能再生数字信号和再生模拟信号同一个协议 集线器&#xff08;多口中继器&#xff09;不具备定向传输的原因集线器是共享式设备的原因集线器的所有接口都处于同一个碰撞域&#xff08;冲突域&#xff09;内的原因 小结 中继器 中继器的功能 中继器的…

JVM 内存模型

1 什么是 JVM 内存模型 JVM 需要使用计算机的内存&#xff0c;Java 程序运行中所处理的对象或者算法都会使用 JVM 的内 存空间&#xff0c;JVM 将内存区划分为 5 块&#xff0c;这样的结构称之为 JVM 内存模型。 2 JVM 为什么进行内存区域划分 随着对象数量的增加&#xff…

基于二值化图像转GCode的单向扫描实现

基于二值化图像转GCode的单向扫描实现 什么是单向扫描单向扫描代码示例 基于二值化图像转GCode的单向扫描实现 什么是单向扫描 在激光雕刻中&#xff0c;单向扫描&#xff08;Unidirectional Scanning&#xff09;是一种雕刻技术&#xff0c;其中激光头只在一个方向上移动&a…

【Vue】二、Vue 组件展示控制的优雅解决方案

vue项目中展示的组件&#xff0c;我平常都是通过v-show进行展示控制&#xff0c;类似这样 通常情况下&#xff0c;一个正常展示组件的流程&#xff0c;是通过前端用户点击触发函数&#xff0c;在函数中对data数据进行操作&#xff0c;从而展示不同的页面 showWork: false, sho…

如何用Docker+jenkins 运行 python 自动化?

1.在 Linux 服务器安装 docker 2.创建 jenkins 容器 3.根据自动化项目依赖包构建 python 镜像(构建自动化 python 环境) 4.运行新的 python 容器&#xff0c;执行 jenkins 从仓库中拉下来的自动化项目 5.执行完成之后删除容器 前言 环境准备 Linux 服务器一台(我的是 CentOS7)…

GitHub工作流的使用笔记

文章目录 前言1. 怎么用2. 怎么写前端案例1&#xff1a;自动打包到新分支前端案例2&#xff1a;自动打包推送到gitee的build分支案例3&#xff1a;暂时略 前言 有些东西真的就是要不断的试错不断地试错才能摸索到一点点&#xff0c;就是摸索到凌晨两三点第二天要8点起床感觉要…

通过例子说明-动态规划

选择>行动>思考&#xff0c;好像是个死循环 -song。 动态规划&#xff08;Dynamic Programming&#xff0c;简称DP&#xff09;是一种解决问题的数学优化方法&#xff0c;通常用于解决具有重叠子问题和最优子结构性质的问题。它的基本思想是将问题拆分成小的子问题&#…

革新性技术:基于搜索操作的存内计算

文章目录 革新性技术&#xff1a;基于搜索操作的存内计算CSDN首个存内计算开发者社区NVALT&#xff1a;近似查找表的艺术MAP&#xff1a;存内计算的未来SQL-PIM&#xff1a;数据库的未来内存计算架构与技术小结从NVALT到NVQuery&#xff1a;存内计算的探索与前景NVQuery&#x…

242. 有效的字母异位词(力扣)(C语言题解)

✨欢迎来到脑子不好的小菜鸟的文章✨ &#x1f388;创作不易&#xff0c;麻烦点点赞哦&#x1f388; 所属专栏&#xff1a;刷题 我的主页&#xff1a;脑子不好的小菜鸟 文章特点&#xff1a;关键点和步骤讲解放在 代码相应位置 题目链接&#xff1a; 242. 有效的字母异位词 …

UE5 C++ 读取本地图片并赋值到UI上

目录 结果图 节点样式 主要代码 调试代码 结果图 节点样式 主要代码 &#xff08;注释纯属个人理解&#xff0c;可能存在错误&#xff09; // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h&q…