二叉搜索树专题

news2025/1/30 9:45:57

二叉搜索树专题

  • 特性篇
    • LeetCode 230. 二叉搜索树中第K小的元素
    • 解题思路
    • 代码实现
    • LeetCode 538. 把二叉搜索树转换为累加树
    • 解题思路
    • 代码实现
  • 基操篇
    • LeetCode 98. 验证二叉搜索树
    • 解题思路
    • 代码实现
    • LeetCode 700. 二叉搜索树中的搜索
    • 代码实现
    • LeetCode 701. 二叉搜索树中的插入操作
    • 解题思路
    • 代码实现
    • 总结

不要纠结,干就完事了,熟练度很重要!!!多练习,多总结!!!

特性篇

LeetCode 230. 二叉搜索树中第K小的元素

在这里插入图片描述

解题思路

二叉搜索树的中序遍历是结果是从小到大排列!

代码实现

class Solution {
    int rank = 0;
    int res;
    public int kthSmallest(TreeNode root, int k) {
        traverse(root, k);
        return res;
    }

    public void traverse(TreeNode root, int k){
        if(root == null){
            return ;
        }
        traverse(root.left,k);
        rank++;
        if(k == rank){
            res = root.val;
        }
        traverse(root.right, k);
    }
}

LeetCode 538. 把二叉搜索树转换为累加树

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

解题思路

二叉搜索树中序遍历从小到大排列,左右节点反过来遍历,就是从大到小排列,那么维护一个变量统计累计和即可。

代码实现

class Solution {
    int sum = 0;
    public TreeNode convertBST(TreeNode root) {
        traverse(root);
        return root;
    }

    public void traverse(TreeNode root){
        if(root == null){
            return ;
        }
        traverse(root.right);
        sum+=root.val;
        root.val = sum;
        traverse(root.left);
    }
}

基操篇

LeetCode 98. 验证二叉搜索树

在这里插入图片描述

解题思路

注意本题二叉搜索树的合法性不仅是当前节点的左右子树需要满足条件,左右子树的子树也需要满足(即递归实现)。

代码实现

class Solution {
    public boolean isValidBST(TreeNode root) {
        return isValidBST(root, null,null);
    }

    public boolean isValidBST(TreeNode root, TreeNode min, TreeNode max){
        if(root == null){
            return true;
        }
        if(min != null && root.val <= min.val){
            return false;
        }

        if(max != null && root.val >= max.val){
            return false;
        }
        return isValidBST(root.left, min, root) && isValidBST(root.right, root, max);
    }
}

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

在这里插入图片描述

代码实现

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

LeetCode 701. 二叉搜索树中的插入操作

在这里插入图片描述

解题思路

在这里插入图片描述

if (root.left == null && root.right == null)
    return null;

在这里插入图片描述

// 排除了情况 1 之后
if (root.left == null) return root.right;
if (root.right == null) return root.left;

在这里插入图片描述

if (root.left != null && root.right != null) {
    // 找到右子树的最小节点
    TreeNode minNode = getMin(root.right);
    // 把 root 改成 minNode
    root.val = minNode.val;
    // 转而去删除 minNode
    root.right = deleteNode(root.right, minNode.val);
}

代码实现

class Solution {
    public TreeNode deleteNode(TreeNode root, int key) {
        if(root == null){
            return null;
        }

        if(root.val > key){
            root.left = deleteNode(root.left, key);
        }else if(root.val < key){
            root.right = deleteNode(root.right, key);
        }else{
            if(root.left == null){
                return root.right;
            }else if (root.right == null){
                return root.left;
            }else {
                TreeNode min = getMin(root.right);
                root.val = min.val;
                root.right = deleteNode(root.right, min.val);
            }
        }
        return root;
    }

    public TreeNode getMin(TreeNode node) {
        while (node.left != null) node = node.left;
        return node;
    } 
}

总结

本题来源于Leetcode中 归属于二叉树类型题目。
同许多在算法道路上不断前行的人一样,不断练习,修炼自己!
如有博客中存在的疑问或者建议,可以在下方留言一起交流,感谢各位!

觉得本博客有用的客官,可以给个点赞+收藏哦! 嘿嘿

喜欢本系列博客的可以关注下,以后除了会继续更新面试手撕代码文章外,还会出其他系列的文章!

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

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

相关文章

总结826

学习目标&#xff1a; 4月&#xff08;复习完高数18讲内容&#xff0c;背诵21篇短文&#xff0c;熟词僻义300词基础词&#xff09; 学习内容&#xff1a; 高等数学&#xff1a;复习12讲二元积分&#xff0c;第12讲习题&#xff0c;做了17道题 英语&#xff1a;早上背单词&am…

CAXA 3D 实体设计2020 caxa电子图板2020 64位/32位 详细安装方法

CAXA实体设计2016是国内软件公司根据美国最新的专利技术和多年在CAD/CAM领域积累的经验打造的专业3D模型设计软件&#xff0c;具有国际先进水平&#xff0c;支持创新模式和工程模式。创新模式将可视化自由设计与精准设计相结合&#xff0c;使产品设计跨越了传统参数化CAD软件的…

PHP项目——外卖点餐系统后台管理解析

项目介绍 系统基于总部多门店的连锁模式&#xff0c;拥有门店独立管理后台&#xff0c;支持总部定价和门店定价、LBS定位点餐&#xff0c;可堂食可外卖&#xff0c;适用于茶饮的外卖点餐场景&#xff0c;搭建自己的一点点、奈雪、喜茶点餐系统。 平台后台 1.商品 对门店总商…

取消调休?这个公司好像知道员工要什么...

今年的五一小长假3天变5天&#xff0c;比以往多2天&#xff0c;但是为了多出来的这两天&#xff0c;前一个周末的周日&#xff0c;也就是本周的周日4月23日&#xff0c;要正常上班一天。 五一回来后的5月6日&#xff0c;也就是回来后的那个周六&#xff0c;也要上班&#xff0…

无线蓝牙耳机哪款音质好?目前音质最好的无线蓝牙耳机推荐

现如今&#xff0c;蓝牙耳机已经是一个非常实用且常见的数码产品了&#xff0c;不少人喜欢戴着蓝牙耳机听歌&#xff0c;玩游戏。一款音质好的蓝牙耳机不止能听个响&#xff0c;还能给人极致的听觉享受。在此&#xff0c;我来给大家分享几款目前音质最好的无线蓝牙耳机&#xf…

命令执行漏洞概述

命令执行漏洞概述 命令执行定义命令执行条件命令执行成因命令执行漏洞带来的危害远程命令执行漏洞相关函数assert()preg_replace()call_user_func() a ( a( a(b)可变函数远程命令执行漏洞的利用系统命令执行漏洞相关函数system()exec()shell_exec()passthru&#xff08;&#x…

网络请求实战-实战Fetch和Promise相关的架构

目录 Promise神器&#xff08;承诺&#xff09; PromiseCoding示例 Promise常见用法 简单的promise Fetch的基本用法 fetch Fetch基本用法 FetchPromise场景举例 小结 Promise神器&#xff08;承诺&#xff09; PromiseCoding示例 代表异步求值的过程和结果 promise…

搭建Spark Standalone集群

文章目录 一&#xff0c;Spark Standalone架构&#xff08;一&#xff09;client提交方式&#xff08;二&#xff09;cluster提交方式 二&#xff0c;Spark集群拓扑三&#xff0c;前提条件&#xff1a;安装配置了分布式Hadoop环境四&#xff0c;在master虚拟机上安装配置Spark&…

SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈(nacos)

Nacos注册中心 &#xff08;一&#xff09;认识和安装Nacos 1、认识Nacos 2、安装nacos 这里下载1.4.1版本 默认端口是8848 下载解压后&#xff0c;终端进入到nacos/bin下&#xff0c;bash startup.sh -m standalone 然后查看start.out文件得到一个网址就可以查看nacos的服…

《Android 移动应用基础教程(Android Studio)(第2版)》【课本习题】【学习通2023春PDF】【参考答案】

文章目录 超星学习通智能终端软件开发&#xff08;基于Android Studio环境&#xff09;章节作业&#xff08;39&#xff09;第一章第二章 Android常见界面布局第三章 Android常见界面控件第四章第五章第六章&#xff08;略&#xff09;第七章第八章第九章第十章第十一章第十二章…

ChatGPT常见问题,Access denied的解决办法

今天&#xff0c;突然想登录一登录ChatGPT&#xff0c;提示 Access denied, You do not have access to chat.openai.com 怎么办&#xff1f; “Access denied You do not have access to chat.openai.com. The site owner may have set restrictions that prevent you from ac…

leetcode142. 环形链表 II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

vue3+electron开发桌面软件(7)——修改注册表,创建级联菜单

系列文章目录 系列第一篇&#xff1a; vue3electron开发桌面软件入门与实战&#xff08;0&#xff09;——创建electron应用 文章目录 系列文章目录前言一、创建右键级联菜单二、了解注册表结构1.手动添加注册表——一级菜单2.手动添加注册表——二级菜单父菜单3.手动添加注册…

IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本&#xff1a;银河麒麟桌面操作系统V10 厂商名称&#xff1a; 广州荣士电子有限公司 认证产品&#xff1a;IC-14W网络IC卡读写器 测试日期&#xff1a; 2022-11-04 …

基于SVG的HMI组件

人机界面是自动化领域不可或缺重要组成部分。人机界面系统的设计看上去并没有太大的技术门槛&#xff0c;但是设计一个HMI系统的工作量是巨大的&#xff0c;如果你没有足够的耐心和精力是难以完成一个通用HMI系统的。构建UI控件库就是一个似乎永远完不成的事情&#xff0c;用户…

12.基于蒙特卡洛抽样的电动汽车充电负荷计算

说明书 MATLAB代码&#xff1a;基于蒙特卡洛抽样的电动汽车充电负荷计算 关键词&#xff1a;电动汽车 蒙特卡洛模拟 抽样 充放电负荷 参考文档&#xff1a;《主动配电网多源协同运行优化研究_乔珊》第3.2节&#xff0c;完全复现 仿真平台&#xff1a;MATLAB 优势&#xf…

JavaWeb——IO、存储、硬盘、文件系统相关常识

目录 一、IO 1、定义 二、存储和硬盘 1、存储 2、硬盘 三、文件系统 1、文件 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、分类 &#xff08;3&#xff09;、操作 2、树形结构和目录 3、路径 &#xff08;1&#xff09;、定义 &#xff08;2&…

elementui是怎么做表单验证的?

文章目录 前言elementui是怎么做表单验证&#xff1f;步骤 一、 表单验证校验代码&#xff1f;二、el-button提交验证代码2.validate方法深入了解1. 有参数2. 无参数 总结 前言 在项目开发中&#xff0c;我们经常会遇到表单保存的功能&#xff0c;在表单保存前&#xff0c;常常…

Salesforce如何防止黑客攻击和数据泄露?了解他们的安全措施!

安全性一直是Salesforce密切关注的问题。Google的安全浏览报告指出&#xff0c;2022年网络钓鱼网站的数量增加了80&#xff05;。面对着黑客攻击、安全漏洞、数据泄露等不安全事件频发&#xff0c;实施更强大的安全措施比以往更加重要。 调查显示&#xff0c;电子邮件目前是网…

阿里巴巴图标,font-family字体样式

阿里巴巴官网&#xff1a;https://www.iconfont.cn/ 如有需要&#xff0c;请注意到文章最后的问题。 一&#xff0c;图标 1&#xff0c;搜索关键词&#xff0c;点击图标 -> 加入购物车 -> 添加到项目 2&#xff0c;两种方式 &#xff08;1&#xff09;选择 Font cla…