广告
返回顶部
首页 > 资讯 > 精选 >Java数据结构之二叉搜索树实例分析
  • 526
分享到

Java数据结构之二叉搜索树实例分析

2023-06-30 18:06:50 526人浏览 薄情痞子
摘要

这篇文章主要介绍“Java数据结构之二叉搜索树实例分析”,在日常操作中,相信很多人在Java数据结构之二叉搜索树实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之二叉搜索树实例分析”的疑

这篇文章主要介绍“Java数据结构之二叉搜索树实例分析”,在日常操作中,相信很多人在Java数据结构之二叉搜索树实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之二叉搜索树实例分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    性质

    二叉搜索树或者是一棵空树,或者是具有下列性质的一棵二叉树,如果当前节点具有左子树,则左子树上的每一个节点值均小于等于当前节点值,如果当前节点具有右子树,则右子树上的每一个节点值均大于等于当前节点值。依据这个性质,当我们前序遍历二叉搜索树的时候,得到的序列应该是从小到大的非递减序列。同时搜索指定值时,只需要与当前节点比较,根据相对大小在左子树或者右子树上进行搜索。

    Java数据结构之二叉搜索树实例分析

    实现

    根据二叉搜索树的性质我们接下来需要实现插入节点,查询节点,删除节点功能。

    节点结构

    public class Treenode {    public int val;    public TreeNode left;    public TreeNode right;    public TreeNode() {    }    public TreeNode(int val) {        this.val = val;    }    public TreeNode(int val, TreeNode left, TreeNode right) {        this.val = val;        this.left = left;        this.right = right;    }}

    初始化

    这里我们假设所有节点值大于0,初始化一个头节点。ps:对于树,链表这类数据结构,为了使第一个节点操作与其他节点保持一致,方便操作,常见的方法是添加一个额外的头节点,指向第一个节点。

    TreeNode head;    private void init() {        //添加一个头节点        head = new TreeNode(-1);    }

    插入节点

    从头节点开始我们遍历二叉搜索树,如果当前节点值小于等于插入节点值,则插入节点在当前节点的右子树上,否则在左子树上,一直深度遍历知道当前节点的右子树(左子树)为空,则插入。

    Java数据结构之二叉搜索树实例分析

        public TreeNode insert(int val) {        TreeNode temp = head;        while (true) {            if (temp.val < val) {                //val应该在右子树上                if (null != temp.right) {                    temp = temp.right;                    continue;                } else {                    temp.right = new TreeNode(val);                    return temp.right;                }            }            //应该在左子树上            if (null != temp.left) {                temp = temp.left;                continue;            }            temp.left = new TreeNode(val);            return temp.left;        }    }

    查找节点

    查找节点的步骤其实在插入节点的时候已经有体现,其实就是将查找值与当前节点比较,大于当前节点走右子树,小于当前节点走左子树,直到值匹配返回节点,或者没有找到返回null。ps:这里为了后面方便实现删除,同时返回了当前节点以及当前节点的父节点,这里使用了commons-lang3包下的Pair工具

    Java数据结构之二叉搜索树实例分析

        public Pair<TreeNode, TreeNode> find(int val) {        TreeNode temp = head.right;        TreeNode parent = head;        while (null != temp) {            if (temp.val == val) {                return Pair.of(temp, parent);            }            parent = temp;            if (temp.val < val) {                //在右子树上                temp = temp.right;                continue;            }            temp = temp.left;        }        return null;    }

    删除节点

    删除节点时候我们需要先找到删除节点的位置,然后做对应操作。有三种情况:

    如果删除的是叶子节点直接删除

    Java数据结构之二叉搜索树实例分析

    如果删除的节点只有左子树或者右子树,则直接将左子树或者右子树节点放在删除节点位置

    Java数据结构之二叉搜索树实例分析

    如果删除节点同时有左子树和右子树,则将右子树节点放在原来节点位置,将左子树放在右子树最左边节点左子树上(反之将左子树放在原来节点位置,右子树放在左子树最右边节点右子树上也可)

    Java数据结构之二叉搜索树实例分析

        public void delete(int val) {        //找到删除节点,删除节点父节点        Pair<TreeNode, TreeNode> curAndParent = this.find(val);        TreeNode cur = curAndParent.getLeft();        TreeNode parent = curAndParent.getRight();        //记录删除当前节点后,当前节点位置放置哪个节点        TreeNode changed;        if (null == cur.left && null == cur.right) {            changed = null;        } else if (null != cur.left && null != cur.right) {            TreeNode tempRight = cur.right;            while (null != tempRight.left) {                //找到最左侧节点                tempRight = tempRight.left;            }            tempRight.left = cur.left;            changed = cur.right;        } else if (null != cur.left) {            changed = cur.left;        } else {            changed = cur.right;        }        if (parent.left == cur) {            parent.left = changed;            return;        }        parent.right = changed;    }

    到此,关于“Java数据结构之二叉搜索树实例分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    --结束END--

    本文标题: Java数据结构之二叉搜索树实例分析

    本文链接: https://www.lsjlt.com/news/330875.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java数据结构之二叉搜索树实例分析
      这篇文章主要介绍“Java数据结构之二叉搜索树实例分析”,在日常操作中,相信很多人在Java数据结构之二叉搜索树实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之二叉搜索树实例分析”的疑...
      99+
      2023-06-30
    • java数据结构之搜索二叉树
      本文实例为大家分享了java数据结构之搜索二叉树的具体代码,供大家参考,具体内容如下 搜索二叉树的定义是:在一个二叉树上,左节点一定比父节点小,右节点一定比父节点大,其他定义跟二叉树...
      99+
      2022-11-12
    • Java数据结构之二叉搜索树详解
      目录前言性质实现节点结构初始化插入节点查找节点删除节点最后前言 今天leetcode的每日一题450是关于删除二叉搜索树节点的,题目要求删除指定值的节点,并且需要保证二叉搜索树性质不...
      99+
      2022-11-13
    • Java数据结构超详细分析二叉搜索树
      目录1.搜索树的概念2.二叉搜索树的简单实现2.1查找2.2插入2.3删除2.4修改3.二叉搜索树的性能 1.搜索树的概念 二叉搜索树是一种特殊的二叉树,又称二叉查找树,二叉排序树,...
      99+
      2022-11-13
    • C++数据结构之搜索二叉树的实现
      目录零.前言1.概念2.作用3.迭代实现(1)查找(2)插入(3)删除4.递归实现(1)查找(2)插入(3)删除5.key/value模型的应用(1)对应查找(2)判断出现次数6.总...
      99+
      2022-11-13
    • 【Java 数据结构】实现一个二叉搜索树
      目录  1、认识二叉搜索树 2、实现一个二叉搜索树 2.1 成员变量 2.2 insert 方法 2.3 search 方法  2.4 remove 方法(重点) 3、二叉搜索树总结 1、认识二叉搜索树 从字面上来看,它只比二叉树多...
      99+
      2023-09-02
      数据结构 算法 二叉搜索树
    • java二叉搜索树使用实例分析
      本篇内容主要讲解“java二叉搜索树使用实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java二叉搜索树使用实例分析”吧!概念二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性...
      99+
      2023-06-29
    • C++二叉搜索树实例分析
      本篇内容介绍了“C++二叉搜索树实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!独一无二的二叉搜索树Given an integer&...
      99+
      2023-06-19
    • JavaScript二叉搜索树构建操作实例分析
      本篇内容介绍了“JavaScript二叉搜索树构建操作实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是二叉搜索树二叉搜索树首先它...
      99+
      2023-07-02
    • C++数据结构二叉搜索树的实现应用与分析
      目录概念二叉搜索树的实现基本框架二叉搜索树的插入二叉搜索树的查找二叉搜索树的删除(重点)二叉搜索树的应用二叉树性能分析总结⭐️博客代码已上传至gitee:https://gitee....
      99+
      2022-11-13
    • C++数据结构之二叉搜索树的实现详解
      目录前言介绍实现节点的实现二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除总结前言 今天我们来学一个新的数据结构:二叉搜索树。 介绍 二叉搜索树也称作二叉排序树,它具有以下性质: 非...
      99+
      2022-11-13
    • Java数据结构之线索化二叉树的实现
      目录1.线索化二叉树的介绍2.线索化二叉树的基本特点3.线索化二叉树的应用案例4.前序线索化二叉树、遍历5.后序线索化二叉树1.线索化二叉树的介绍 将数列 {1, 3, 6, 8, ...
      99+
      2022-11-13
    • Java字符串,数组及二叉搜索树实例分析
      本文小编为大家详细介绍“Java字符串,数组及二叉搜索树实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java字符串,数组及二叉搜索树实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。题目一&nbs...
      99+
      2023-06-29
    • Java数据结构之线索化二叉树怎么实现
      这篇文章主要介绍“Java数据结构之线索化二叉树怎么实现”,在日常操作中,相信很多人在Java数据结构之线索化二叉树怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java数据结构之线索化二叉树怎么实现...
      99+
      2023-06-30
    • Java数据结构学习之二叉树
      一、背景知识:树(Tree) 在之前的笔记中,我们介绍的链表、栈、队列、数组和字符串都是以线性结构来组织数据的。本篇笔记要介绍的树采用的是树状结构,这是一种非线性的数据组织形式。 树...
      99+
      2022-11-12
    • C++详解数据结构中的搜索二叉树
      目录定义查找某个元素构造搜索二叉树往搜索二叉树中插入元素搜索二叉树删除节点定义 搜索二叉树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树: 1、若任意节点的左子树...
      99+
      2022-11-13
    • Java二叉搜索树增、插、删、创的示例分析
      小编给大家分享一下Java二叉搜索树增、插、删、创的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!①概念二叉搜索树又称二叉排序树,它或者是一棵空树**,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有...
      99+
      2023-06-29
    • JavaScript数据结构与算法之二叉树插入节点、生成二叉树的示例分析
      小编给大家分享一下JavaScript数据结构与算法之二叉树插入节点、生成二叉树的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解...
      99+
      2022-10-19
    • Java深入了解数据结构之二叉搜索树增插删创详解
      目录①概念②操作-查找③操作-插入④操作-删除1. cur.left == null2. cur.right == null3. cur.left != null &&...
      99+
      2022-11-13
    • Java数据结构之AVL树实例分析
      这篇文章主要介绍“Java数据结构之AVL树实例分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Java数据结构之AVL树实例分析”文章能帮助大家解决问题。AVL树的引入搜索二叉树有着极高的搜索效...
      99+
      2023-06-30
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作