【二叉树part06】| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

news2024/9/28 1:20:51

目录

🎈LeetCode654.最大二叉树

🎈LeetCode617.合并二叉树

🎈LeetCode700. 二叉搜索树中的搜索

🎈LeetCode98. 验证二叉搜索树


🎈LeetCode654.最大二叉树

链接:654.最大二叉树

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

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

返回 nums 构建的 最大二叉树 

 

 还是用递归三部曲做,代码如下:

public TreeNode constructMaximumBinaryTree(int[] nums) {
        // 1 <= nums.length <= 1000
        return bulid(nums,0,nums.length-1);
    }
    public TreeNode bulid(int[] nums,int start,int end){
        // 0 <= nums[i] <= 1000
        if(start>end){
            return null;
        }
        if(start==end){
            return new TreeNode(nums[start]);
        }
        int max=0;
        int index=0;
        for(int i=start;i<=end;i++){
            if(nums[i]>max){
                max=nums[i];
                index=i;
            }
        }
        TreeNode root=new TreeNode(max);
        root.left=bulid(nums,start,index-1);
        root.right=bulid(nums,index+1,end);
        return root;
    }

🎈LeetCode617.合并二叉树

链接:617.合并二叉树

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

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

返回合并后的二叉树。

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

public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        TreeNode root=new TreeNode();
        if(root1==null && root2==null){
            return null;
        }else if(root1==null && root2!=null){
            return root2;
            // return new TreeNode(root2.val);
        }else if(root1!=null && root2==null){
            return root1;
            // return new TreeNode(root1.val);
        }else{
            root.val=root1.val+root2.val;
            // return new TreeNode(root1.val+root2.val);
            root.left= mergeTrees(root1.left,root2.left);
            root.right=mergeTrees(root1.right,root2.right);
        }
        return root;
    }

🎈LeetCode700. 二叉搜索树中的搜索

链接:700.二叉搜索树中的搜索

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

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

 

public TreeNode searchBST(TreeNode root, int val) {
        //root 是二叉搜索树 
        if(root==null){
            return null;
        }
        TreeNode node=new TreeNode(0);
        if(root.val>val){
           node=searchBST(root.left,val);
        }else if(root.val<val){
            node=searchBST(root.right,val);
        }else{
            return root;
        }
        return node;
    }

🎈LeetCode98. 验证二叉搜索树

链接:98.验证二叉搜索树

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

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

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

 

二叉搜索树的中序遍历正好是一个递增的序列,可以利用中序遍历来判断是不是二叉搜索树,代码如下: 

public TreeNode searchBST(TreeNode root, int val) {
        //递归法
        //root 是二叉搜索树 
        if(root==null){
            return null;
        }
        TreeNode node=new TreeNode(0);
        if(root.val>val){
           node=searchBST(root.left,val);
        }else if(root.val<val){
            node=searchBST(root.right,val);
        }else{
            return root;
        }
        return node;
    }
public boolean isValidBST(TreeNode root) {
        // 迭代法
        if(root==null){
            return true;
        }
        Stack<TreeNode> st=new Stack<>();
        st.push(root);
        TreeNode pre=null;
        while(!st.isEmpty()){
            TreeNode node=st.peek();
            if(node!=null){
                st.pop();
                if(node.right!=null){
                    st.push(node.right);
                }
                st.push(node);
                st.push(null);
                if(node.left!=null){
                    st.push(node.left);
                }
            }else{
                st.pop();
                TreeNode temp=st.pop();
                if(pre!=null && pre.val>=temp.val){
                    return false;
                }
                pre=temp;
            }
        }
        return true;
    }

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

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

相关文章

林客本地生活商城小程序开发

本地生活商城小程序的市场前景非常广阔。近年来&#xff0c;随着移动互联网技术的普及和人们消费观念的变化&#xff0c;越来越多的消费者开始通过手机进行线上购物。本地生活商城小程序恰好满足了用户对于便捷、快速、个性化购物体验的需求&#xff0c;具有以下优势&#xff1…

1752_使用Perl实现目录遍历

全部学习汇总&#xff1a; GreyZhang/speed_emacs: Try to make a new emacs configuration which is fast even on windows! (github.com) 关于Perl和Python的优劣我不去做什么分析&#xff0c;也不去发表什么深入的见解。我个人的学习过程是先Perl后Python再回到Perl。因为工…

【2023.6.26】记达梦数据库基于信创服务器麒麟OS报错与优化

一、场景描述 OS&#xff1a;银河麒麟V10(GUI)CPU&#xff1a;鲲鹏920达梦数据库&#xff1a;V8 &#xff08;基于平台信创&#xff1a;麒麟V10、鲲鹏架构&#xff09;金蝶中间件&#xff1a;V9 二、达梦数据库报错记录 报错1&#xff1a;&#xff08;SWT&#xff1a;18564&…

基于Java削面快餐店点餐服务系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

cmd中输入npm install,回车——安装node modules依赖,出现报错的【解决方法】

目录 1.正常情况是&#xff1a; 2.当前问题&#xff1a; 3.解决方法&#xff1a; 当拿到一个前端项目的代码文件夹的时候,想要启动项目。 如果项目的代码文件夹里面没有node modules文件夹&#xff1a; 需要打开cmd&#xff0c;然后在里面输入 npm install &#xff08;可…

c++初始化列表和静态成员

文章目录 一、初始化列表二、静态(static)成员 一、初始化列表 类对于成员变量的赋值有两种方式 函数体内赋值初始化列表 函数体内赋值就是直接在构造函数中赋值即可&#xff0c;而初始化列表它是较为特殊的一种方式! 初始化列表是在构造函数()之后以:开始&#xff0c;然后后…

查询穿梭框实现

技术栈&#xff1a; 使用vue3 的composition api 和 tsx 进行开发 一、需求描述 点击编辑&#xff0c;显示穿梭框&#xff1a; 可将左侧维度拖动至右侧&#xff0c;已选维度可上下拖动调整顺序。 二、需求分析 1、状态传递过程 我们首先来分析一下&#xff0c;整个流程中的…

魔改xxl-job,彻底告别手动配置任务!自动注册xxljob定时任务

xxl-job是一款非常优秀的任务调度中间件&#xff0c;轻量级、使用简单、支持分布式等优点&#xff0c;让它广泛应用在我们的项目中&#xff0c;解决了不少定时任务的调度问题。 我们都知道&#xff0c;在使用过程中需要先到xxl-job的任务调度中心页面上&#xff0c;配置执行器…

WiFi模块测试|高通QCA9531方案WiFi模块网页配置说明-SKW99/SKW100

本篇以高通QCA9531方案无线路由WiFi模块SKW99为例&#xff0c;简单介绍 高通方案无线路由WiFi模块的软件使用。友情提示&#xff1a;多图&#xff0c;请在WiFi环境下阅读。 以SKW99为例&#xff0c;在SKW99规格书找到模块系统框图、PIN脚图及各个PIN脚的描述定义&#xff1b;之…

AutoSAR系列讲解(入门篇)3.4-RTE对Ports的支撑(下)

一、C/S接口的实现 之前在第二章AppL中讲过了C/S接口&#xff0c;这里再更加深入的说明一下其实现的原理&#xff1a;首先&#xff0c;C/S接口就是客户/服务接口&#xff0c;这个接口就是客户来调用服务 端的操作的一个接口。也就是我写着写着&#xff0c;发现我想要调用一个函…

【Figma技巧】布尔变量控制图层显隐

用2023年6月22日更新的Figma最新功能&#xff0c;实现按钮控制图层显隐的交互。 实现效果 步骤 1. 创建本地变量 点击右侧面板中的Local variables弹出变量面板&#xff0c;点击底部Create variable按钮&#xff0c;创建一个Boolean布尔变量。 本案例中&#xff0c;我需要分…

从0开始Jmeter接口测试实战

在之前的文章中给大家介绍过接口测试文档和接口测试用例示例&#xff0c;本文基于Jmeter工具给大家介绍一下如何实现接口测试用例&#xff1a;包括发起Http请求&#xff0c;绕过登陆&#xff0c;验证响应。JMeter是Apache组织开发的基于Java的压力测试工具。具有开源免费、框架…

Python|Pyppeteer操作浏览器,弹出文件选择框,实现自动选择“指定文件”(14)

前言 本文是该专栏的第14篇,结合优质项目案例持续分享Pyppeteer的干货知识,记得关注。 使用pyppeyeer操作浏览器的时候,可能有时候会遇到这样的情况,如下图所示: 通过程序脚本自动点击某个按钮之后,触发一个弹出框,需要输入对应的文件路径。经验丰富的同学,可能会想到…

深入浅出 - 单例模式

博主介绍&#xff1a; ✌博主从事应用安全和大数据领域&#xff0c;有8年研发经验&#xff0c;5年面试官经验&#xff0c;Java技术专家✌ Java知识图谱点击链接&#xff1a;体系化学习Java&#xff08;Java面试专题&#xff09; &#x1f495;&#x1f495; 感兴趣的同学可以收…

【MySQL】幽深不可测,登此方觉心

详解Mysql安装教程 一、MySQL基础 1、MySQL是什么? MySQL是一种用关系型数据库管理系统的软件。它是一种开源数据库&#xff0c;可以利用它来存储、管理和访问各种类型的数据。MySQL可用于多种应用程序&#xff0c;包括网站、电子商务系统、移动应用程序、企业级应用程序等…

Clickhouse物化视图原理和使用详解

前言 ClickHouse广泛用于用户和系统日志查询场景中&#xff0c;主要针对于OLAP场景&#xff0c;为业务方提供稳定高效的查询服务。在业务场景下&#xff0c;数据以不同的格式、途径写入到clickhouse。用传统JOIN方式查询海量数据&#xff0c;通常有如下痛点: 每个查询的代码冗…

【Java】ConcurrentHashMap1.8源码保姆级解析

目录 ConcurrentHashMap 1.8的优化 初始化流程 扩容流程 读取数据流程 计数器的实现 ConcurrentHashMap 1.8的优化 存储结构的优化 数组链表 -> 数组链表红黑树 写数据加锁的优化 扩容的优化&#xff08;协助优化&#xff09; 计数器的优化 LongAddr -> Cell[] 分…

力扣算法练习(二)

主要参考自力扣官网解法 1.最长回文子串(5) 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例 1&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab"…

【Java】JVM学习(七)

JVM调优 堆空间如何设置 在分代模型中&#xff0c;各分区的大小对GC的性能影响很大。如何将各分区调整到合适的大小&#xff0c;分析活跃数据的大小是很好的切入点。 活跃数据的大小&#xff1a;应用程序稳定运行时长期存活对象在堆中占用的空间大小&#xff0c;也就是Full …

Git安装及使用图文教程详解(附带安装文件)

Git安装及使用图文教程详解&#xff08;附带安装文件&#xff09; 原创&#xff1a;丶无殇  2023-06-26 文章目录 下载安装下载安装验证安装成功版本查看 基础指令Git常用指令【首次必须】设置签名用户、邮箱1.初始化本地仓库2.查看本地库状态3.创建文件4.添加文件至暂存区5…