数据结构与算法-二分搜索树节点的查找
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!
文章目录
- 引言
- 一、二分搜索树的基本概念
- 二、二分搜索树节点查找的步骤
- 三、二分搜索树节点查找的实现
- 1. 二分搜索树节点类
- 2. 二分搜索树类
- 3. Java 示例代码
- 四、总结
引言
二分搜索树是一种特殊的二叉树,其中每个节点的值都大于其左子树中的所有节点的值,且小于其右子树中的所有节点的值。这种特性使得在二分搜索树中查找、插入和删除节点变得非常高效。本文将深入探讨二分搜索树节点查找的基本原理,并通过具体的Java代码详细说明在二分搜索树中查找节点的实现步骤。
一、二分搜索树的基本概念
二分搜索树是一种特殊的二叉树,具有以下特性:
- 左子树:每个节点的左子树中的所有节点的值都小于该节点的值。
- 右子树:每个节点的右子树中的所有节点的值都大于该节点的值。
- 唯一性:树中不允许存在重复的键值。
二、二分搜索树节点查找的步骤
查找二分搜索树中的节点通常按照以下步骤进行:
- 从根节点开始:检查根节点的值是否等于目标值。
- 递归查找:如果目标值小于当前节点的值,则在左子树中查找;如果目标值大于当前节点的值,则在右子树中查找。
- 终止条件:如果当前节点为空或找到目标值,则返回相应的结果。

三、二分搜索树节点查找的实现
接下来,我们将通过一个示例来详细了解二分搜索树节点查找的实现步骤。
1. 二分搜索树节点类
首先定义二分搜索树的节点类:
public class TreeNode {int val;TreeNode left;TreeNode right;public TreeNode(int val) {this.val = val;this.left = null;this.right = null;}
}
2. 二分搜索树类
定义二分搜索树类,实现节点的查找:
public class BinarySearchTree {private TreeNode root;public void insert(int val) {root = insert(root, val);}private TreeNode insert(TreeNode node, int val) {if (node == null) {return new TreeNode(val);}if (val < node.val) {node.left = insert(node.left, val);} else if (val > node.val) {node.right = insert(node.right, val);}return node;}public TreeNode find(int val) {return find(root, val);}private TreeNode find(TreeNode node, int val) {if (node == null || node.val == val) {return node;}if (val < node.val) {return find(node.left, val);} else {return find(node.right, val);}}public void inorderTraversal() {inorderTraversal(root);}private void inorderTraversal(TreeNode node) {if (node != null) {inorderTraversal(node.left);System.out.print(node.val + " ");inorderTraversal(node.right);}}
}
3. Java 示例代码
创建二分搜索树并查找节点:
public class Main {public static void main(String[] args) {BinarySearchTree bst = new BinarySearchTree();// 插入节点bst.insert(5);bst.insert(3);bst.insert(7);bst.insert(4);bst.insert(2);// 中序遍历显示二分搜索树System.out.println("Inorder Traversal:");bst.inorderTraversal();// 查找节点TreeNode foundNode = bst.find(4);if (foundNode != null) {System.out.println("\nFound node with value: " + foundNode.val);} else {System.out.println("\nNode not found.");}// 查找不存在的节点TreeNode notFoundNode = bst.find(9);if (notFoundNode != null) {System.out.println("Found node with value: " + notFoundNode.val);} else {System.out.println("Node not found.");}}
}
四、总结
二分搜索树是一种非常实用的数据结构,尤其适用于需要频繁查找、插入和删除元素的应用场景。在实际编程中,二分搜索树可以用于实现高效的数据存储和检索,例如在数据库索引、符号表等领域有着广泛的应用。
喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘

💝💝💝如有需要请大家订阅我的专栏【数据结构与算法】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!
| 数据结构与算法相关文章索引 | 文章链接 |
|---|---|
| 数据结构与算法-插入排序 | 数据结构与算法-插入排序 |
| 数据结构与算法-希尔排序 | 数据结构与算法-希尔排序 |
| 数据结构与算法-归并排序 | 数据结构与算法-归并排序 |
| 数据结构与算法-随机快速排序 | 数据结构与算法-随机快速排序 |
| 数据结构与算法-双路快速排序 | 数据结构与算法-双路快速排序 |
| 数据结构与算法-三路排序 | 数据结构与算法-三路排序 |
| 数据结构与算法-关于堆的基本存储介绍 | 数据结构与算法-关于堆的基本存储介绍 |
| 数据结构与算法-关于堆的基本排序介绍 | 数据结构与算法-关于堆的基本排序介绍 |
| 数据结构与算法-索引堆及其优化 | 数据结构与算法-索引堆及其优化 |
| 数据结构与算法-二分搜索树 | 数据结构与算法-二分搜索树 |
| 数据结构与算法-二分搜索树链表节点的插入 | 数据结构与算法-二分搜索树链表节点的插入 |
❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙
相关文章:
数据结构与算法-二分搜索树节点的查找
💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言一、二分搜…...
C++|设计模式(七)|⭐️观察者模式与发布/订阅模式,你分得清楚吗
本文内容来源于B站: 【「观察者模式」与「发布/订阅模式」,你分得清楚吗?】 文章目录 观察者模式(Observer Pattern)的代码优化观察者模式 与 发布订阅模式 他们是一样的吗?发布订阅模式总结 我们想象这样一…...
计算机毕业设计选题推荐-学院教学工作量统计系统-Java/Python项目实战
✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…...
人机交互不仅仅是科技问题
人机交互不仅仅局限于物理和数理科学的应用,还涉及到更广泛的管理、文理、哲学、艺术、伦理以及法律等领域。下面这些领域在人机协同和智能系统应用中扮演着重要角色: 智能系统在企业管理、资源分配、决策支持等方面的应用,可以帮助管理者优化…...
Lua Debug.GetInfo
在 Lua 中,debug.getinfo 函数的第一个参数指定了要获取信息的函数的级别。这个级别是一个整数,表示调用栈的深度。以下是一些常见的级别和它们的含义: - 1:当前函数(即调用 debug.getinfo 的函数)。 - 2&a…...
每日刷题(最短路、图论)
目录 游戏 思路 代码 魔法 思路 代码 P1364 医院设置 思路 代码 P1144 最短路计数 思路 代码 游戏 I-游戏_河南萌新联赛2024第(三)场:河南大学 (nowcoder.com) 思路 利用dijkstra去寻找起点到其余所有点的最短路径,当…...
远程服务器训练网络之tensorboard可视化
cd到tensorboard events存储的位置 启动tensorboard tensorboard --logdir./ 得到运行结果: TensorBoard 1.13.1 at http://work:6006 (Press CTRLC to quit) 创建tunnel映射到本地,在本地ssh,最好使用公网地址 ssh -N -L 8080:localhost:60…...
MySQL锁详解
锁是计算机在执行多线程或线程时用于并发访问同一共享资源时的同步机制,MySQL中的锁是在服务器层或者存储引擎层实现的,保证了数据访问的一致性与有效性。 MySQL锁: 按粒度分为:全局锁、表级锁、页级锁、行级锁。按模式分为&…...
面试问题记录:
1,hashmap扩容的时候,链表超长但不满足转变成红黑树的条件时: 【HashMap】链表和红黑树互相转换的几种情况和数组的扩容机制_hashmap红黑树转链表条件-CSDN博客 2,cglib与proxy区别 JDK 动态代理和 CGLIB 动态代理对比_动态代理…...
vue如何在组件中监听路由参数的变化
使用 watch 监听 $route 对象 的变化,从而捕捉路由参数的变化 beforeRouteUpdate 导航守卫 当前组件路由更新时调用 beforeRouteUpdate 钩子只在组件被复用时调用,即当组件实例仍然存在时。如果组件是完全重新创建的,那么应该使用 beforeR…...
antd中form表单校验文件上传
antd中文件上传需要单独设置this.model中得数据 this.$set(this.model, filePath,上传成功后返回得文件路径地址)...
商家转账到零钱2024最新开通必过攻略
微信支付商家转账到零钱功能申请设置了人工审核的门槛,本意是为了防止没有合规使用场景的商户滥用该功能,但这也让相当多的真实用户被一次次拒之门外。结合过去6年开通此类产品的经验,今天我们就以2024年最新的的商家转账到零钱的开通流程做一…...
2024全新Thinkphp聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能/全开源运营版本
全开源运营版本聊天室H5实时聊天室群聊聊天室自动分配账户完群组/私聊/禁言等功能 运营版本的聊天室,可以添加好友,建立群组,私聊,禁言功能 H5TP5.0mysqlPHP 源码开源不加密...
(一)javascript中class类
在 JavaScript 中使用 class 语法可以定义类的结构,其中可以包括静态属性/方法、私有属性/方法、公共属性/方法和受保护属性/方法。这些概念有助于封装和数据隐藏,使得代码更加模块化和安全。下面我会解释这些不同的属性和方法,以及如何在类中…...
【注意力MHA,MQA,GQA,MLA】
注意力机制优化简明图解 1. 多头注意力(MHA) 图示: Input --> [Attention Head 1]--> [Attention Head 2]--> [Attention Head 3]--> ...--> [Attention Head N]--> [Concatenate] --> Output公式: Outpu…...
《从零开始做个摸鱼小网站! · 序》灵感来源
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了,虽然优惠只有一年&a…...
计算机基础(Windows 10+Office 2016)教程 —— 第5章 文档编辑软件Word 2016(上)
文档编辑软件Word 2016 5.1 Word 2016入门5.1.1 Word 2016 简介5.1.2 Word 2016 的启动5.1.3 Word 2016 的窗口组成5.1.4 Word 2016 的视图方式5.1.5 Word 2016 的文档操作5.1.6 Word 2016 的退出 5.2 Word 2016的文本编辑5.2.1 输入文本5.2.3 插入与删除文本5.2.4 复制与移动文…...
短视频矩阵管理系统源码:实现短视频内容全面布局
随着移动互联网的普及,短视频应用逐渐成为人们获取信息、娱乐休闲的重要途径。为了满足用户多样化需求,实现短视频内容的全面布局,短视频矩阵管理系统应运而生。本文将详细介绍短视频矩阵管理系统的源码实现,帮助您更好地理解并应…...
系统设计中15 个最重要的权衡
系统设计的第一法则:一切都与权衡有关。 在设计系统时,我们需要决定要包含哪些功能以及要忽略哪些功能。每次我们做这个决定时,我们都在进行权衡。在本文中,我们将探讨系统设计中遇到的15个最常见的权衡问题,并使用实…...
12年外贸实战经验,一定对你有帮助!
更多外贸干货及开发客户的方法,尽在微信【千千外贸干货】 NO1 客户总是抱怨价格太高,我常以我们产品质量过硬作为回应。但自从我进入贸易公司后,才真正意识到,在商业世界里,价格才是王道。 NO2 如果顾客提出要去工厂检…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建
制造业采购供应链管理是企业运营的核心环节,供应链协同管理在供应链上下游企业之间建立紧密的合作关系,通过信息共享、资源整合、业务协同等方式,实现供应链的全面管理和优化,提高供应链的效率和透明度,降低供应链的成…...
python如何将word的doc另存为docx
将 DOCX 文件另存为 DOCX 格式(Python 实现) 在 Python 中,你可以使用 python-docx 库来操作 Word 文档。不过需要注意的是,.doc 是旧的 Word 格式,而 .docx 是新的基于 XML 的格式。python-docx 只能处理 .docx 格式…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
Modbus RTU与Modbus TCP详解指南
目录 1. Modbus协议基础 1.1 什么是Modbus? 1.2 Modbus协议历史 1.3 Modbus协议族 1.4 Modbus通信模型 🎭 主从架构 🔄 请求响应模式 2. Modbus RTU详解 2.1 RTU是什么? 2.2 RTU物理层 🔌 连接方式 ⚡ 通信参数 2.3 RTU数据帧格式 📦 帧结构详解 🔍…...
消防一体化安全管控平台:构建消防“一张图”和APP统一管理
在城市的某个角落,一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延,滚滚浓烟弥漫开来,周围群众的生命财产安全受到严重威胁。就在这千钧一发之际,消防救援队伍迅速行动,而豪越科技消防一体化安全管控平台构建的消防“…...
