数据结构与算法-二分搜索树遍历

news2024/11/13 9:37:44

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

文章目录

      • 引言
      • 一、二分搜索树的基本概念
      • 二、二分搜索树遍历的类型
      • 三、二分搜索树遍历的实现
        • 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 void preorderTraversal() {
        preorderTraversal(root);
    }

    private void preorderTraversal(TreeNode node) {
        if (node != null) {
            System.out.print(node.val + " ");
            preorderTraversal(node.left);
            preorderTraversal(node.right);
        }
    }

    public void inorderTraversal() {
        inorderTraversal(root);
    }

    private void inorderTraversal(TreeNode node) {
        if (node != null) {
            inorderTraversal(node.left);
            System.out.print(node.val + " ");
            inorderTraversal(node.right);
        }
    }

    public void postorderTraversal() {
        postorderTraversal(root);
    }

    private void postorderTraversal(TreeNode node) {
        if (node != null) {
            postorderTraversal(node.left);
            postorderTraversal(node.right);
            System.out.print(node.val + " ");
        }
    }
}
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("Preorder Traversal:");
        bst.preorderTraversal();
        System.out.println();

        // 中序遍历
        System.out.println("Inorder Traversal:");
        bst.inorderTraversal();
        System.out.println();

        // 后序遍历
        System.out.println("Postorder Traversal:");
        bst.postorderTraversal();
        System.out.println();
    }
}

四、总结

二分搜索树是一种非常实用的数据结构,尤其适用于需要频繁查找、插入和删除元素的应用场景。在实际编程中,二分搜索树可以用于实现高效的数据存储和检索,例如在数据库索引、符号表等领域有着广泛的应用。


喜欢博主的同学,请给博主一丢丢打赏吧↓↓↓您的支持是我不断创作的最大动力哟!感谢您的支持哦😘😘😘
打赏下吧

💝💝💝如有需要请大家订阅我的专栏【数据结构与算法】哟!我会定期更新相关系列的文章
💝💝💝关注!关注!!请关注!!!请大家关注下博主,您的支持是我不断创作的最大动力!!!

数据结构与算法相关文章索引文章链接
数据结构与算法-插入排序数据结构与算法-插入排序
数据结构与算法-希尔排序数据结构与算法-希尔排序
数据结构与算法-归并排序数据结构与算法-归并排序
数据结构与算法-随机快速排序数据结构与算法-随机快速排序
数据结构与算法-双路快速排序数据结构与算法-双路快速排序
数据结构与算法-三路排序数据结构与算法-三路排序
数据结构与算法-关于堆的基本存储介绍数据结构与算法-关于堆的基本存储介绍
数据结构与算法-关于堆的基本排序介绍数据结构与算法-关于堆的基本排序介绍
数据结构与算法-索引堆及其优化数据结构与算法-索引堆及其优化
数据结构与算法-二分搜索树数据结构与算法-二分搜索树
数据结构与算法-二分搜索树链表节点的插入数据结构与算法-二分搜索树链表节点的插入
数据结构与算法-二分搜索树节点的查找数据结构与算法-二分搜索树节点的查找

❤️❤️❤️觉得有用的话点个赞 👍🏻 呗。
❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

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

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

相关文章

Halcon 边缘提取(亚像素)

Halcon提供多种边缘提取算法。像素提取方法有常用的边缘提取算子或深度学习分割模型等。考虑到精度问题可能需要提取亚像素边缘。当然也可以提取轮廓&#xff1a;线、圆、椭圆等。本文只讨论提取轮廓。 1 基本概念 正常情况下&#xff0c;无需特殊操作即可提取边缘轮廓。 1…

这些天,有多少人去电影院看巴黎奥运会?

近期&#xff0c;巴黎奥运会的赛况频频登上热搜&#xff0c;中国奥运健儿们的奋勇拼搏令人热血沸腾。而许多观众&#xff0c;或由于租房情况不便于用投影仪观赏比赛&#xff0c;或由于期待更佳的观赛体验&#xff0c;因此有不少人去电影院观赛。由于实时数据的更新性和统计的复…

[Bugku] web-CTF靶场-计算器

计算器 1.开启环境 理论上来说题目最多只能填0-9的答案&#xff0c;如果需要填大于9的需要修改maxlength参数 得出flag

「码」上行动 一物一码+TPM让“多进货多卖货”不再是口号

“门店进货量翻倍&#xff0c;一些门店一个月连续补货3次&#xff01;”在与纷享销客产品经理的电话交流中&#xff0c;X饮品企业的张总难掩喜悦之情。 他兴奋地表示&#xff0c;在北方城市推出的基于一物一码的门店进销双激励码营销试点取得了显著成果&#xff0c;所有参与试…

开放原子校源行 | 武汉大学师生一行走进麒麟信安,开展社会实践交流活动

“开放原子校源行”是开放原子开源基金会作为国家级开源公益平台发起的长期性开源教育推广公益项目。项目拟通过资助高校设立开源社团、推广开源课程、设置开源助学金、引导开源实践等方式培育开源人才&#xff0c;加快将开源文化、理念和技术融入校园&#xff0c;引导广大师生…

CST软件如何实现S-parameter随其他参数变化的1D曲线

本期的FAQ更新一个非常高频的问题&#xff0c;如何实现S-parameter随其他参数变化的1D曲线。有的时候也不一定是S参数&#xff0c;可能是用户关心的阻抗结果&#xff0c;也可能是VSWR等。 在老版本的时候&#xff0c;CST软件有个后处理的宏可以很容易的将某一频点下的0D转换成…

引领未来交通新纪元:综合智慧监管平台

引领未来交通新纪元&#xff1a;综合智慧监管平台 在21世纪的今天&#xff0c;随着科技的飞速发展&#xff0c;交通运输行业作为国民经济的命脉&#xff0c;正经历着前所未有的变革与挑战。面对日益增长的运输需求、复杂多变的交通环境以及公众对安全、高效、绿色出行的迫切期…

AcWingTrie树

字典树的应用背景&#xff1a; 看以下几个题: 1、给出n个单词和m个询问&#xff0c;每次询问一个单词&#xff0c;回答这个单词是否在单词表中出现过 答:简单!map&#xff0c;短小精悍。 好。下一个 每次询问一个前缀&#xff0c;回答询问是多少个单词的前缀。2、给出n个单词和…

硬核!288页Python核心知识笔记(附思维导图,建议收藏)

不少朋友在学习Python时&#xff0c;都会做大量的笔记&#xff0c;随着学习进度的增加&#xff0c;笔记越来越厚&#xff0c;但有效内容反而越来越少。 今天就给大家分享一份288页Python核心知识笔记&#xff0c;相较于部分朋友乱糟糟的笔记&#xff0c;这份笔记更够系统地总结…

软件项目管理工具排行榜:国内外优劣对比

项目管理工具对项目开发的重要性不言而喻&#xff0c;通过对比业内对各个项目管理工具的认可度&#xff0c;筛选出人们公认的软件项目管理工具排行榜&#xff0c;具体详细如下&#xff1a; 1、Microsoft Project 简介&#xff1a;Microsoft Project是一款强大的基于云的项目管理…

【数据结构】包装类和泛型

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; ⭐在更专栏Java ⭐数据结构 ⭐已更专栏有C语言、计算机网络⭐ &#x1f451;目录 包装类&#x1f319; ⭐基本类型对应的包…

4款一眼万年的精品软件,免费又好用,可惜很多人不知道

各位Windows用户&#xff0c;有没有觉得自带的播放器不太好用&#xff1f;曾经用过暴风影音、QQ影音、迅雷看看和快*等等国产播放器的大佬们&#xff0c;估计小孩都上小学了吧。 PotPlayer 这款PotPlayer视频播放器&#xff0c;它占用空间小&#xff0c;功能丰富强大&#xf…

【Qt】为什么Qt是你选择的理由?

目录 客户端 图形化界面 Windows环境下可以开发GUI的方案 Qt介绍 Qt的发展史 Qt所支持的平台 Qt版本 Qt的优点 Qt的应用场景 Qt的行业发展方向 Qt的发展前景 使用Qt的成功案例 一般来说&#xff0c;计算机的岗位有四种&#xff0c;分别是&#xff1a; 后端前端测试…

Golang通用代码生成器:仙童 电音仙女尝鲜版八,从MySQL8自动反射生成项目

Golang通用代码生成器&#xff1a;仙童 电音仙女尝鲜版八&#xff0c;从MySQL8自动反射生成项目 Golang通用代码生成器仙童&#xff0c;电音仙女尝鲜版八&#xff0c;此版本增强修复了数据库自动反射功能。更新修复了前端代码生成器无登录模块时的错误。修复了多对多候选的缺陷…

乐鑫原厂ESP32-S3模块ESP32-S3-WROOM-1区别与比较

乐鑫原厂ESP32-S3对外发售的模块&#xff0c;公开的有3类5种&#xff0c;分别是&#xff1a; 1&#xff0c;ESP32-S3-WROOM-1 模组 2&#xff0c;ESP32-S3-WROOM-1U 模组 3&#xff0c;ESP32-S3-WROOM-2 模组 4&#xff0c;ESP32-S3-MINI-1 模组 5&#xff0c;ESP32-S3-MINI-1…

Java对象流

对象流 对象输入流 java.io.ObjectInputStream使用对象流可以进行对象反序列化 构造器 ObjectInputStream(InputStream in) 将当前创建的对象输入流链接在指定的输入流上 方法 Object readObject() 进行对象反序列化并返回。该方法会从当前对象输入流链接的流中读取若干…

Python写UI自动化--playwright(在UI元素上悬停)

要在UI元素上执行鼠标悬停&#xff08;hover&#xff09;动作&#xff0c;可以使用page.hover()方法。这个方法使鼠标指针移动到指定的元素上&#xff0c;就像用户将鼠标悬停在该元素上一样。这对于触发那些依赖于鼠标悬停事件的行为&#xff08;如显示下拉菜单、提示框或其他动…

【数据结构】哈希表(散列表)

介绍 哈希表&#xff08;也叫散列表&#xff09;&#xff0c;是根据关键码值&#xff08; Key value &#xff09;而直接进行访问的数据结构&#xff0c;也就是说&#xff0c;它通过把关键码值映射到表中的一个位置来访问记录&#xff0c;以加快查找的速度。这个映射函数叫做散…

“您的连接不是私密连接”怎么解决?

遇到“您的连接不是私密连接”的警告时&#xff0c;这通常意味着浏览器无法与网站建立安全的加密连接&#xff0c;可能是因为网站的SSL证书存在问题或网络连接存在安全风险。 1、清除浏览器缓存和Cookies&#xff1a;清除浏览器缓存和Cookies有时可以解决这个问题&#xff0c;因…

在Qt中获取Windows中进程的PID

主要是用到了系统自带的工具【tasklist.exe】 利用 QProcess调用这个tasklist有一点坑&#xff0c;已经在代码中指出了。 指定为csv格式输出的话&#xff0c;在后处理时比较方便。 QList<quint64> listProcessIdentifier(QString processName) {QProcess process;QStrin…