数据结构与算法-二分搜索树节点的查找

news2024/9/21 8:04:25

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快!

文章目录

      • 引言
      • 一、二分搜索树的基本概念
      • 二、二分搜索树节点查找的步骤
      • 三、二分搜索树节点查找的实现
        • 1. 二分搜索树节点类
        • 2. 二分搜索树类
        • 3. Java 示例代码
      • 四、总结

引言

二分搜索树是一种特殊的二叉树,其中每个节点的值都大于其左子树中的所有节点的值,且小于其右子树中的所有节点的值。这种特性使得在二分搜索树中查找、插入和删除节点变得非常高效。本文将深入探讨二分搜索树节点查找的基本原理,并通过具体的Java代码详细说明在二分搜索树中查找节点的实现步骤。

一、二分搜索树的基本概念

二分搜索树是一种特殊的二叉树,具有以下特性:

  1. 左子树:每个节点的左子树中的所有节点的值都小于该节点的值。
  2. 右子树:每个节点的右子树中的所有节点的值都大于该节点的值。
  3. 唯一性:树中不允许存在重复的键值。

二、二分搜索树节点查找的步骤

查找二分搜索树中的节点通常按照以下步骤进行:

  1. 从根节点开始:检查根节点的值是否等于目标值。
  2. 递归查找:如果目标值小于当前节点的值,则在左子树中查找;如果目标值大于当前节点的值,则在右子树中查找。
  3. 终止条件:如果当前节点为空或找到目标值,则返回相应的结果。
    在这里插入图片描述

三、二分搜索树节点查找的实现

接下来,我们将通过一个示例来详细了解二分搜索树节点查找的实现步骤。

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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

【源码+文档+调试讲解】学生党务学习系统的设计与实现

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统大学生党务学习平台信息管理难度大&#xff0c;容错率低&…

MySQL基础练习题7-销售分析

题目&#xff1a;报告 2019年春季 才售出的产品。即 仅 在 2019-01-01 &#xff08;含&#xff09;至 2019-03-31 &#xff08;含&#xff09;之间出售的商品。 准备数据 分析数据 方法一&#xff1a;group by having 第一步&#xff1a;先找到要求的列 第二步&#xff1…

手持式洗地机该怎么选购?多款性能超好的洗地机推荐

传统的清洁方式&#xff0c;不仅费时费力&#xff0c;而且清洁效果也真的很一般&#xff0c;很多地方都清洁不到位。好在洗地机的出现很好的解决了这些问题&#xff0c;因为一款好的洗地机不仅能够让家务清洁事半功倍&#xff0c;而且还能有效除菌&#xff0c;地板更干净卫生&a…

某RED书旋转验证码识别(一)

注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 本文的验证码网址如下,使用base64解码获得 因为旋转验证码能够处理的方式实在太多了,我将以处理的难度和方式依次讲解最简单到最难,到精度最高的方式,本文还是延续之前使用梯度计算的方式…

视频编辑SDK提供配套DEMO源码,提高开发效率

面对日益增长的视频制作需求&#xff0c;如何快速、高效且低成本地生产出专业级视频&#xff0c;成为众多企业面临的共同挑战。美摄科技&#xff0c;作为视频编辑技术的领航者&#xff0c;携其强大的视频编辑SDK及配套DEMO源码&#xff0c;为企业视频创作带来了革命性的解决方案…

Ubuntu系统下,截图软件(飞书,flameshot等)无法正常截图与编辑

Ubuntu系统下&#xff0c;截图软件&#xff08;飞书&#xff0c;flameshot等&#xff09;无法正常截图与编辑 问题描述&#xff1a; ubuntu系统下&#xff0c;飞书&#xff08;设置截图快捷键&#xff09;&#xff0c;flameshot等截图工具无法正常使用&#xff0c;每次按快捷…

iOS ------ 持久化

一&#xff0c;数据持久化的目的 1&#xff0c;快速展示&#xff0c;提升体验 已经加载过的数据&#xff0c;用户下次查看时&#xff0c;不需要再次从网络&#xff08;磁盘&#xff09;加载&#xff0c;直接展示给用户 2.节省用户流量 对于较大的资源数据进行缓存&#xff…

2024小卷Spring Boot3.0教程思维导图整理

这是2024年小卷整理的最新spring Boot3.0实战教程的思维导图&#xff0c;后续将开始更新相关的笔记&#xff0c;欢迎新手朋友加入一起学习&#xff0c;如果您感兴趣不妨点赞关注下&#xff0c;您的支持是我更新的动力~加油&#xff01;

【视觉SLAM】 G2O库编写步骤介绍

介绍G2O&#xff0c;并阐述基本使用方法。 G2O以稀疏优化器&#xff08;SparseOptimizer&#xff09;为核心&#xff0c;分为图的构建与求解器构建两部分&#xff0c;分别对应该图的上下两部分。 G2O编程步骤共分七步&#xff0c;如图所示&#xff1a; 构建求解器 1、创建一…

英飞凌 TC3XX单片机HSM内核开发-Secure Boot(七)

HSM UCB配置 UCB_HSM_ORIG 和 UCB_HSM_COPY配置描述 HSMCOTP保护配置了专用HSM闪存扇区的HSM独占和一次性可编程&#xff08;OTP&#xff09;保护。它提供了通过两个配置集增量添加此类保护到闪存扇区的可能性&#xff1a; 从UCB_HSMCOTP0_ORIG和UCB_HSMCOTP0_COPY派生的HSM…

day8 Excel教程——利用数据验证规范单元格输入!(超多干货)

day8 Excel教程——利用数据验证规范单元格输入! 本章目录 day8 Excel教程——利用数据验证规范单元格输入!1. 整数,小数和文本长度1.1 限制用户输入1(最小)和10(最大)之间的数字1.2 限制用户应输入小于或等于3%的小数(百分比)值1.3 限制用户应输入文本长度为18位的身份…

【卫星载荷之QF项目-001】Vivado 2018.3安装

1.简介 Vivado 是 FPGA 厂商赛灵思公司&#xff08;Xilinx&#xff09;于 2012 年起发布的集成设计环境。Vivado2018.3 是 2018 年 Xilinx 推出的 Vivado 最后一个版本&#xff0c;相对稳定。 2.软件下载 网上自己去官网即可获取安装资源包。 3.软件安装 解压缩安装包&…

来未来面试真题:根据树形表输出树形结构

根据以下所给代码补充完printNode方法&#xff0c;要求输出如下形式的树形结构 package com.ting.sort;import java.util.ArrayList; import java.util.HashMap; import java.util.List;public class Menu {static class Node{Integer id;Integer parentId;String name;Node(In…

【PyTorch】多对象分割项目

对象分割任务的目标是找到图像中目标对象的边界。实际应用例如自动驾驶汽车和医学成像分析。这里将使用PyTorch开发一个深度学习模型来完成多对象分割任务。多对象分割的主要目标是自动勾勒出图像中多个目标对象的边界。 对象的边界通常由与图像大小相同的分割掩码定义&#xf…

【MySQL进阶】事务隔离级别 MVCC

目录 MySQL事务隔离级别 1. 读未提交&#xff08;Read Uncommitted&#xff09; 2. 读已提交&#xff08;Read Committed&#xff09; 3. 可重复读&#xff08;Repeatable Read&#xff09;(默认隔离级别) 4. 串行化&#xff08;Serializable&#xff09; 表格总结 MVCC …

C++栈和队列(容器适配器)

目录 1.什么是适配器&#xff1f; 2.栈(stack) 3.队列(queue) 4.双端队列(deque) 5.优先级队列(priority_queue) 1.什么是仿函数&#xff1f; 2.仿函数有什么用&#xff1f; 3.优先级队列(priority_queue) 1.什么是适配器&#xff1f; 我们之前实现栈和队列&#xff0…

QTCreate中使用git进行代码的备份

一开始使用QTCreate设计UI时&#xff0c;都是手动保存&#xff0c;后面觉得应该升级一下自己的技术栈&#xff0c;把git工具学了一些&#xff0c;摸索两天。首先&#xff0c;git是一个版本控制工具&#xff0c;正常开发需要一个master和一个你自己需要的分支&#xff0c;在分支…

批量下载 B 站 视频的工具 downkyi

批量下载 B 站 视频的工具 downkyi 亲测好用 图片&#xff1a; 下载地址&#xff1a; https://github.com/leiurayer/downkyi

SQL Server Profiler 只查看当前操作的语句

1.打开Sql Server Manage Studio&#xff0c;登录->工具->SQL Server Profiler->链接 点击事件选择 点击列筛选器 点击spid 输入对应的spid 如果不知道你的spid是多少的话&#xff0c;你可以先不筛选&#xff0c;直接运行&#xff0c;然后开启跟踪再运行一个独特的…