Day20 代码随想录(1刷) 二叉树

news2024/9/21 18:38:57

目录

654. 最大二叉树

617. 合并二叉树

700. 二叉搜索树中的搜索

98. 验证二叉搜索树


 

654. 最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

  1. 创建一个根节点,其值为 nums 中的最大值。
  2. 递归地在最大值 左边 的 子数组前缀上 构建左子树。
  3. 递归地在最大值 右边 的 子数组后缀上 构建右子树。

返回 nums 构建的 最大二叉树 

示例 1:

输入:nums = [3,2,1,6,0,5]
输出:[6,3,5,null,2,0,null,null,1]
解释:递归调用如下所示:
- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。
    - [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。
        - 空数组,无子节点。
        - [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。
            - 空数组,无子节点。
            - 只有一个元素,所以子节点是一个值为 1 的节点。
    - [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。
        - 只有一个元素,所以子节点是一个值为 0 的节点。
        - 空数组,无子节点。

示例 2:

输入:nums = [3,2,1]
输出:[3,null,2,null,1]

提示:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 1000
  • nums 中的所有整数 互不相同

状态:完成

思路:先构建根节点再构建左右节点。该题使用前序遍历可以满足要求,先找出数组中此时的最大值该值则为根节点的值,然后在递归左右节点,分割数组,最后链接根节点的左右节点完成题目的要求。        

class Solution {
    public TreeNode constructMaximumBinaryTree(int[] nums) {
        if(nums.length==0) return null;
        
        int index=0;
        for(int i=0;i<nums.length;i++){
            index=nums[i]>nums[index]?i:index;
        }
        TreeNode root=new TreeNode(nums[index]);
        TreeNode left=null;
        TreeNode right=null;
        if(index>0)
        left=constructMaximumBinaryTree(Arrays.copyOfRange(nums,0,index));
        if(index<nums.length-1)
        right=constructMaximumBinaryTree(Arrays.copyOfRange(nums,index+1,nums.length));
        root.left=left;
        root.right=right;
        return root;
    }
}

617. 合并二叉树

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

示例 1:

输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]

示例 2:

输入:root1 = [1], root2 = [1,2]
输出:[2,2]

提示:

  • 两棵树中的节点数目在范围 [0, 2000] 内
  • -104 <= Node.val <= 104

状态:完成

思路:前序遍历两棵树,分情况进行讨论,当两个节点都是空则返回,如果其中有一个节点不是空则返回该节点,如果两个节点都不是空的则把两个节点之和创建的新数组返回。 

class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1==null&&root2==null) return null;
        TreeNode node=null;
        TreeNode left=null;
        TreeNode right=null;
        if(root1!=null&&root2!=null){
            node=new TreeNode(root1.val+root2.val);
            left =mergeTrees(root1.left,root2.left);
            right =mergeTrees(root1.right,root2.right);
        }else{
            node=root1!=null?new TreeNode(root1.val):new TreeNode(root2.val);
            if(root1!=null){
                left=mergeTrees(root1.left,null);
                right=mergeTrees(root1.right,null);
            }else if(root2!=null){
                left=mergeTrees(root2.left,null);
                right=mergeTrees(root2.right,null);
            }
        }
        node.left=left;
        node.right=right;
        return node;
    }
}

700. 二叉搜索树中的搜索

给定二叉搜索树(BST)的根节点 root 和一个整数值 val

你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 null 。

示例 1:

输入:root = [4,2,7,1,3], val = 2
输出:[2,1,3]

示例 2:

输入:root = [4,2,7,1,3], val = 5
输出:[]

提示:

  • 树中节点数在 [1, 5000] 范围内
  • 1 <= Node.val <= 107
  • root 是二叉搜索树
  • 1 <= val <= 107

 状态:完成

思路:二叉搜索树的特点就是左节点小于该根节点,右节点大于该根节点则如果节点值比目标值小则搜索右子树,反之搜索左子树。

class Solution {
    public TreeNode searchBST(TreeNode root, int val) {
        if(root==null) return null;
        if(root.val==val) return root;
        if(root.val>val){
            TreeNode node=searchBST(root.left,val);
            return node;
        }else if(root.val<val){
            TreeNode node=searchBST(root.right,val);
            return node;
        }
        return null;
    }
}

98. 验证二叉搜索树

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

有效 二叉搜索树定义如下:

  • 节点的左

    子树

    只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

示例 1:

输入:root = [2,1,3]
输出:true

示例 2:

输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

提示:

  • 树中节点数目范围在[1, 104] 内
  • -231 <= Node.val <= 231 - 1

状态:没写出来,看思路做出来了

思路:中序遍历时结果必须是递增的才是二叉搜索树,有这个特性直接中序遍历,如果不递增则不是二叉搜索树得证。

class Solution {
    ArrayList<Integer> list=new ArrayList<>();
    public boolean isValidBST(TreeNode root) {
        if(root==null) return true;
        mid(root);
        if(list.size()==1) return true;
        int temp=list.get(0);
        for(int i=1;i<list.size();i++){
            if(list.get(i)<=temp) return false;
            temp=list.get(i);
        }
        return true;
    }
    public void mid(TreeNode root){
        if(root==null) return;
        isValidBST(root.left);
        list.add(root.val);
        isValidBST(root.right);   
    }
}

 感想:今天学了很多二叉树的基本特性,同时力扣刷题量也突破了200+了。继续学习,持续进步。

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

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

相关文章

今日arXiv最热NLP大模型论文:微软重磅:AgentAI,下一代人工智能的关键

人工智能的发展已从简单算法进化到复杂的大型基础模型&#xff0c;尤其在理解开放世界环境中的感官信息方面取得显著进步。然而&#xff0c;关键转折点在于从过度简化方法转向强调整体运作的系统&#xff0c;催生了Agent AI的兴起。Agent AI将大型基础模型整合到代理行动中的具…

如何实现无公网IP及服务器实现公网环境企业微信网页应用开发调试

文章目录 1. Windows安装Cpolar2. 创建Cpolar域名3. 创建企业微信应用4. 定义回调本地接口5. 回调和可信域名接口校验6. 设置固定Cpolar域名7. 使用固定域名校验 企业微信开发者在应用的开发测试阶段&#xff0c;应用服务通常是部署在开发环境&#xff0c;在有数据回调的开发场…

❤ leetCode简易题1-两数之和、简易2--回文数判断、简易14-最长公共前缀

❤ leetCode简易题1-两数之和、简易题14- 最长公共前缀 1、简易1-两数之和 ① 题目要求 数字A B target&#xff0c;以target为求和结果&#xff0c;找出数组中符合的A、B数字下标。 第一次做的时候完全脑子一片蒙&#xff0c;随后认真看了看题目发现是发现找符合target和…

rust中字符串String常用方法和注意事项

Rust 中通常说的字符串指的是&#xff1a;String 和 &str(字符串字面值、或者叫字符串切片)这两种类型。str是rust中基础字符串类型&#xff0c;String是标准库里面的类型。Rust 中的字符串本质上是&#xff1a;Byte的集合&#xff08;Vec<u8>&#xff09; 基础类型…

职场口才提升之道

职场口才提升之道 在职场中&#xff0c;口才的重要性不言而喻。无论是与同事沟通协作&#xff0c;还是向上级汇报工作&#xff0c;亦或是与客户洽谈业务&#xff0c;都需要具备良好的口才能力。一个出色的职场人&#xff0c;除了拥有扎实的专业技能外&#xff0c;还应具备出色…

gsxt cookie:__jsl_clearance_s 参数研究获取

gsxt cookie&#xff1a;__jsl_clearance_s 参数研究获取 今天尝试了一下 gsxt 网站中 cookie __jsl_clearance_s 参数解密 抓包 打开 fiddler 抓包工具&#xff0c;新建无痕浏览器页面刷新后得到抓包数据 发现后续的所有的请求都会携带这两个加密参数 __jsl_clearance_s17…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之六 简单图像倾斜校正处理效果 一、简单介绍 二、简单图像倾斜校正处理效果实现原理 三、简单图像倾斜校正…

2024年升级_python风控建模实战lendingClub_新增2020年数据(14万条)

作者Toby&#xff0c;来源公众号&#xff1a;python风控模型《python风控建模实战lendingClub_新增2020年数据&#xff08;14万条&#xff09;》 公告通知&#xff0c;我方重庆未来之智信息技术咨询服务有限公司自研课程《python风控建模实战lendingClub》2024年升级&#xff…

20240325数据驱动的机器学习预测单层二维材料力学性能

本论文使用模型主要有Mo,W,S,Se原子组成的单层二维材料。大小为30nmx30nm&#xff0c;中间有切口&#xff0c;切口大小从无切口以1nm增长到5nm&#xff0c;加载方向垂直于切口方向&#xff0c;并且分锯齿型和扶手椅型方向。 使用MD对模型进行拉伸&#xff0c;一共288个模型。 …

题目42—接雨水

题目来源于LeetCode 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 方法&#xff1a;使用单调栈。找到中间凹槽位置&#xff0c;并利用单调栈找出其左边的第一个最高柱子&#xff0c;右边的第一个最高柱…

NKCTF 2024(三月周报比赛一)

web My first cms 扫目录找到管理员界面登陆&#xff0c;账号Admin&#xff0c;密码Admin123,账号可以根据forget来进行查询是否存在&#xff0c;然后进行弱密码攻击&#xff0c;这里网上有两种rce&#xff0c;一种sstl一种代码执行 我用的是第二种 EXtension>use defined…

上班几周了,

过年回来后&#xff0c;时间变得飞快&#xff0c;很多事情都是马上要去干&#xff0c;而且又是很着急的事&#xff0c;呵呵&#xff0c;真的要干趴了 然后——经历了第一次年后的周末连续加班出版本保量产&#xff0c;经历了加班到凌晨3点调试问题&#xff0c;经历我们在疯狂的…

人物百度百科怎么做?需要什么资料?

在互联网时代&#xff0c;百度百科作为国内最具权威性的知识分享平台&#xff0c;吸引了大量用户关注和参与。究竟哪些人适合创建和编辑人物百度百科呢&#xff1f;本文伯乐网络传媒将为您揭秘人物百度百科的适用人群&#xff0c;并详细介绍如何注册、登录、创建及维护人物百度…

Python爬虫学习完整版

一、什么是爬虫 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性&#xff0c;根据用户需求定向抓取相关网页并分析也成为如今主流的爬取策略。 1 爬虫可以做什么 你可以爬取网络上的的图片&#…

小孔平板应力集中问题matlab有限元编程【源码+PPT讲义】|三节点三角形单元|平面单元|稀疏矩阵 |Comsol网格

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

python中类的导入与使用

1、类的介绍 与C中面向对象思想类似&#xff0c;有时候为了方便&#xff0c;需要专门创建一个类&#xff0c;将相关的函数全部写入到该类中&#xff0c;方便后续创建对象&#xff0c;再使用类中函数。那么如何创建完类&#xff0c;在其他文件中使用类中函数&#xff0c;这是这篇…

FreeRtos学习笔记(12)systemView 分析任务调度情况

FreeRtos学习笔记&#xff08;12&#xff09;systemView 分析任务调度情况 使用stm32f429 freertosV10.5.1 systemView 3.5 keil AC5 systemView 移植 从官网下载 systemView 软件 将下面文件添加到工程中 freertos 修改 systemView 需要 FreeRTOSConfig.h 开启如下宏, …

NSS [SWPUCTF 2022 新生赛]Power!

NSS [SWPUCTF 2022 新生赛]Power! 开题。 随便传一个111&#xff0c;后端进行了一个文件包含操作。 输入index.php&#xff0c;回显了一个不可显示图片。 有点小蒙蔽的&#xff0c;一般这种情况就源码&#xff0c;抓包&#xff0c;扫描。源码里面果然有货。 base解码后是index…

城市繁荣需要交通枢纽,企业发展需要营销枢纽

交通、运输、贸易 流量&#xff0c;人流、信流 单词都是&#xff1a;TRAFFIC 大城市都需要铁路、机场等交通枢纽&#xff0c;来承接人流、信息流的inbound“到达、着陆”&#xff0c;城市经济才能得以持续繁荣。 在数字营销技术领域有个非常著名的营销模式叫“inblound marke…

《C++ Primer 第五版 中文版》第12章 动态内存【阅读笔记 + 个人思考】

《C Primer 第五版 中文版》第12章 动态内存【阅读笔记 个人思考】 12.1 动态内存与智能指针12.1.1 shared_ptr类 静态内存包括&#xff1a;初始化只读数据段&#xff0c;初始化读写数据段&#xff0c;未初始化数据和常量数据段。 详细在下面博客总结&#xff1a; Linux系统下…