代码随想录算法训练营Day16 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

LeetCode 654 最大二叉树

在这里插入图片描述

本题思路:我们可以看到每次其实这个找最大值,然后创建节点的过程就是一个二叉树的前序遍历的过程。所以,我们可以递归来完成它。

  • 先创找到数组中,最大的值的下标,然后创建根节点
  • 然后根据下标,将数组分为,左数组,和右数组
  • 然后让根节点的左孩子等于 左数组中的最大值
  • 然后让根节点的右孩子等于 右数组中的最大值
  • 每一次递归之前,都要重新划分左数组和右数组!

注意:分割数组的时候,要注意区间。左闭右开(自己定义)

为了方便对代码的思路有个好的理解。举个例子演示下:
在这里插入图片描述

  • 首先在 nums 中找到 最大值 3 ,此时下标为 index = 0,创建根节点在这里插入图片描述
  • 然后分割左数组,右数组在这里插入图片描述
  • 再递归进入左数组,进行构造,发现,start 和 end 一样,所以返回 null ,让第一层递归 root.left 接收在这里插入图片描述
  • 再递归进入右数组,找到最大值,并创建节点,由于,start != end,所以会创建,让 root.right 接收在这里插入图片描述
  • 此时还要进行分割数组,分为左数组和右数组在这里插入图片描述
  • 然后节点 2 的递归的时候,进入左数组判断返回 null,进入右数组符合条件创建节点。然后给 节点 2 的 right在这里插入图片描述
class Solution {public TreeNode constructMaximumBinaryTree(int[] nums) {return tavel(nums,0,nums.length);}public TreeNode tavel(int[] nums,int start,int end){if(start == end){return null;}int index = findMaxIndex(nums,start,end);int rootValue = nums[index];TreeNode root = new TreeNode(rootValue);if(nums.length == 1){return root;}int leftstart = start;int leftend = index;int rigthstart = index+1;int rightend = end;root.left = tavel(nums,leftstart,leftend);root.right = tavel(nums,rigthstart,rightend);return root;}public static int findMaxIndex(int[] nums,int start, int end){int max = nums[start];int index = start;for(int i = start + 1; i < end; i++){if(nums[i] > max){max = nums[i];index = i;}}return index;}}

LeetCode 617 合并二叉树

在这里插入图片描述
本题思路:利用递归来完成。根据题目的描述,可以得到以下内容。我们用前序遍历来完成

  • 如果 root1 和 root2 都为空的情况下,直接返回即可
  • 如果 root1 == null,则返回 root2
  • 如果 root2 == null,则返回 root1
  • 两个不为null,创建节点,val = root1.val + root2.val
  • 然后再一次递归,进入左子树,进入右子树
class Solution {public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {// 如果两个都为空,直接返回 nullif(root1 == null && root2 == null){return null;}// 两个都不为空或者,一个为空if(root1 == null){return root2; }if(root2 == null){return root1;}TreeNode root = new TreeNode(root1.val + root2.val);root.left = mergeTrees(root1.left,root2.left);root.right = mergeTrees(root1.right,root2.right);return root;}
}

LeetCode 700 二叉搜索树中的搜索

在这里插入图片描述
本题思路:使用前序遍历,得到目标节点,返回直接返回即可
为了方便理解,画个图来演示下,这个流程。

  • 先遍历根节点,判断是否符合目标值在这里插入图片描述
  • 发现不符合,就开始递归判断,左树,此时发现符合目标值,于是将这个节点接收在这里插入图片描述
  • 然后开始递归判断右树在这里插入图片描述
  • 进入右树,最终没有符合的就返回 null 接收
  • 最后哪个树返回的不是null,就返回哪个节点
class Solution {public TreeNode searchBST(TreeNode root, int val) {return preorder(root,val);}public TreeNode preorder(TreeNode node, int val){if(node == null){return null;}if(node.val == val){return node;}TreeNode resleft = preorder(node.left,val);TreeNode resright = preorder(node.right,val);return resleft == null?resright:resleft;}
}

LeetCode 98 验证二叉搜索树

在这里插入图片描述
在这里插入图片描述

本题思路: 二叉搜索树的中序遍历,是有序单调递增的。所以我的思路是,用中序遍历得到一个列表。然后判断是否是单调递增即可

  • 示例1:得到的列表如下在这里插入图片描述
  • 示例2: 得到的列表如下在这里插入图片描述
  • 可以得到,是否是二叉搜索树,示例1是,示例2不是
class Solution {public boolean isValidBST(TreeNode root) {List<Integer> list = new ArrayList();inorder(root,list);for(int i = 1; i < list.size(); i++){if(list.get(i-1) >= list.get(i)){return false;}}return true;}public void inorder(TreeNode root,List<Integer> list){if(root == null){return;}inorder(root.left,list);list.add(root.val);inorder(root.right,list);}
}

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

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

相关文章

c语言-整型在内存的存储

文章目录 前言一、整型数值在内存中的存储1.1 整型数值的表示形式1.2 二进制的表示形式1.3 整数在内存中存储 二、大端字节序存储和小端字节序存储2.1 大端字节序存储2.2 小端字节序存储2.3 练习 总结 前言 本篇文章叙述c语言中整型数据在内存中的存储方式。 一、整型数值在内…

Vue学习计划-Vue3--核心语法(一)OptionsAPI、CompositionAPI与setup

1. OptionsAPI与CompositionAPI Vue2的API设计是Options(配置)风格的Vue3的API设计是Composition(组合)风格的 Options API的弊端&#xff1a; Options类型的API&#xff0c;数据、方法、计算属性等&#xff0c;是分散在&#xff1a;data、methods、computed中的&#xff0c;若…

【操作系统xv6】学习记录2 -RISC-V Architecture

说明&#xff1a;看完这节&#xff0c;不会让你称为汇编程序员&#xff0c;知识操作系统的前置。 ref&#xff1a;https://binhack.readthedocs.io/zh/latest/assembly/mips.html https://www.bilibili.com/video/BV1w94y1a7i8/?p7 MIPS MIPS的意思是 “无内部互锁流水级的微…

Maple 2021安装包下载及安装教程

Maple 2021下载链接&#xff1a;https://docs.qq.com/doc/DUk9MQ1BPRHRYWU9s 1.鼠标右键解压到“Maple 2021” 2.选中Setup&#xff0c;鼠标右击选择“以管理员身份运行” 3.点击“Next” 4.选择I accept the agreement&#xff0c;点击“Next” 5.选择软件安装路径&#xff0c…

IDEA JAVA Spring Boot运行Hello World(1.8)

参考资料&#xff1a; Spring Boot运行Hello World - 知乎https://blog.csdn.net/weixin_44005516/article/details/108293228(解决bug)SpringBoot入门第一章&#xff1a;Hello World-java教程-PHP中文网 (仅参考如何运行程序)java 8安装教程 java 8安装教程_java8安装-CSDN博…

力扣:763. 划分字母区间(贪心,哈希)

题目&#xff1a; 给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段&#xff0c;同一字母最多出现在一个片段中。 注意&#xff0c;划分结果需要满足&#xff1a;将所有划分结果按顺序连接&#xff0c;得到的字符串仍然是 s 。 返回一个表示每个字符串片段的长度…

SpringBoot集成MQTT协议

简介 MQTT 可以被解释为一种低开销&#xff0c;低带宽占用的即时通讯协议&#xff0c;可以用较少的代码和带宽为远程设备连接提供实时可靠的消息服务&#xff0c;它适用于硬件性能低下的远程设备以及网络状况糟糕的环境下&#xff0c;因此 MQTT 协议在 IoT&#xff08;Interne…

1月3日代码随想录反转二叉树

226翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#xff1a; 输入&#xff1a;root [2,1,3] 输出&#xff1a;[2,3,…

原生JS做别踩白块游戏

思路 创建初始一个按钮并为他添加点击监听开始创建随机方块&#xff0c;并样式_box.offsetTop speed px结合setInterval使得方块不断下移创建和删除方块的原则&#xff1a;box.offsetTop>0&#xff08;可视区上部没有方块了&#xff09;时候需要创建一行方块&#xff0c;…

江西速欣商务咨询有限公司:深度解析停息挂账,助您财务重启

停息挂账问题可能对个人或企业财务产生严重影响&#xff0c;但江西速欣商务咨询有限公司以其深度解析停息挂账的专业能力&#xff0c;致力于助您重新启动财务&#xff0c;实现财务的良性发展。 专业团队&#xff0c;深度解析挂账难题 速欣商务咨询拥有一支专业团队&#xff0c…

域名授权验证系统PHP源码,盗版追踪、双重授权和在线加密功能,附带安装教程

源码介绍 PHP域名授权验证系统是一个功能强大的系统&#xff0c;提供了多项功能来保护你的域名和软件的合法性。它包括盗版追踪、域名IP双重授权、在线加密等功能&#xff0c;同时还提供了PHP授权验证更新系统的完整版&#xff0c;方便你进行一键更新和生成自助授权。 盗版追…

【谷歌云】注册谷歌云 创建Compute Engine

文章目录 一、Google Cloud注册1.1 账号信息1.2 付款信息验证1.3 验证成功 二、Compute Engine创建2.1 启动Compute Engine API2.2 创建实例2.3 新建虚拟机实例2.4 等待实例创建完成2.5 查看虚拟机配置信息2.6 创建防火墙规则2.7 SSH远程连接虚拟机 三、参考链接 一、Google Cl…

ChatGPT 4.0真的值得花钱买入吗?

性能提升&#xff1a; ChatGPT 4.0的推出不仅意味着更先进的技术&#xff0c;还代表着更强大的性能。相较于3.5&#xff0c;4.0在处理任务时更为高效&#xff0c;响应更迅速。 更智能的理解&#xff1a; 随着版本的升级&#xff0c;ChatGPT 4.0对语境的理解能力得到了进一步的…

集群部署篇--Redis 集群动态伸缩

文章目录 前言一、redis 节点的添加1.1 redis 的实例部署&#xff1a;1.2 redis 节点添加&#xff1a;1.3 槽位分配&#xff1a;1.4 添加从节点&#xff1a; 二、redis 节点的减少2.1 移除主节点2.1.1 迁移槽位2.1.1 删除节点&#xff1a; 三、redis 删除节点的重新加入3.1 加入…

odoo17 | 用户界面的基本交互

前言 现在我们已经创建了我们的新模型及其 相应的访问权限&#xff0c;是时候了 与用户界面交互。 在本章结束时&#xff0c;我们将创建几个菜单以访问默认列表 和窗体视图。 数据文件 &#xff08;XML&#xff09; Odoo在很大程度上是数据驱动的&#xff0c;因此模块定义的…

深度学习MLP_实战演练使用感知机用于感情识别_keras

目录 &#xff08;1&#xff09;why deep learning is game changing?&#xff08;2&#xff09;it all started with a neuron&#xff08;3&#xff09;Perceptron&#xff08;4&#xff09;Perceptron for Binary Classification&#xff08;5&#xff09;put it all toget…

跨年烟花-Html5实现_附完整源码【可直接运行】

文章目录 &#x1f37b;前言&#x1f538;目录结构⚫完整源码&#x1f535;源码分析&#x1f4ae;注意事项 &#x1f488;总结 &#x1f37b;前言 随着科技的进步和互联网的普及&#xff0c;人们对于跨年庆祝的方式也在不断变化。传统的烟花燃放虽然美丽&#xff0c;但存在环境…

【华为机试】2023年真题B卷(python)-金字塔-微商的收入

一、题目 题目描述&#xff1a; 微商模式比较典型&#xff0c;下级每赚 100 元就要上交 15 元&#xff0c;给出每个级别的收入&#xff0c;求出金字塔尖上的人收入。 二、输入输出 输入描述; 第一行输入N&#xff0c;表示有N个代理商上下级关系。 接下来输入N行&#xff0c;每行…

Windows—常用DOS命令

解释&#xff1a;DOS命令即面向磁盘的操作命令 进入DOS页面&#xff1a;快捷键“winR”&#xff0c;输入cmd help命令 help 【命令名】可查看其他命令的解释&#xff0c;直接输入help也可以查看部分命令 另外&#xff0c;如果输入help显示help不是内部或外部命令&#xff0c;…

帮企10合一万能分销商城源码系统:全开源可二开,全端覆盖+完整的代码包以及搭建教程

电商市场的竞争日益激烈&#xff0c;越来越多的企业开始意识到分销商城的重要性。然而&#xff0c;市面上的分销商城系统往往存在着功能单一、扩展性差等问题&#xff0c;无法满足企业的多样化需求。今天来给大家分享一款10合一万能分销商城源码系统。 以下是部分代码示例&…