排序二叉树

排序二叉树排序二叉树一、基本概念二叉树是一种从上往下的树状结构的数据结构,从根节点开始每个节点最多有两个子节点,左边的为左子节点,右边的为右子节点。排序二叉树–有顺序,且没有重复元素的二叉树。顺序为:

大家好,又见面了,我是你们的朋友全栈君。

排序二叉树

一、基本概念

二叉树是一种从上往下的树状结构的数据结构,从根节点开始每个节点最多有两个子节点,

左边的为左子节点,右边的为右子节点。

排序二叉树–有顺序且没有重复元素的二叉树。顺序为:

对每个节点而言:

1)如果左子树不为空,则左子树上的所有节点都小于该节点;

2)如果右子树不为空,则右子树上的所有节点都大于该节点;

<span role="heading" aria-level="2">排序二叉树

如图,根节点为5,左边的节点都大于5,右边的节点都小于5。

二、基本算法

1.查找

1)首先与根节点比较,相同则找到;

2)如果小于根节点,则到左子树种递归查找;

3)如果大于根节点,则到右子树中递归查找;

这个步骤与在数组中进行二分查找是类似的。此外,在排序二叉树中查找最大值和最小值很简单。

2.遍历

排序二叉树可以方便的按序遍历,用递归的方式。

如下图的例子,先访问根节点的左子树,一直到最左边的节点–1,1没有右子树

,返回上一层,访问3,然后访问3的右子树,4没有左子树,所以访问4,然后4的右

子树6,以此类推。1–3–4–6–7–8–9

<span role="heading" aria-level="2">排序二叉树

 

 不用递归的方式,也可以实现按序遍历:第一个节点为最左边的节点,从第一个

节点开始,依次找后继节点,找其后继节点的算法为:

1)如果该节点有右子节点,则后继节点为右子树中的最小节点;

2)如果该节点无右子节点,则后继节点为父节点或者某个祖先节点,

从当前节点往上找,如果它是父节点的右孩子,则继续找父节点,直到

它不是右孩子或父节点为空,第一个非右孩子节点的父节点就是后继节点,

如果找不到这样的祖先节点,则后继为空,遍历结束。

3.插入

在排序二叉树中,插入元素首先要找插入位置,即新节点的父节点。

与查找元素类似从根节点开始找:

1)与当前节点相同,则已经存在了,不能插入;

2)如果小于当前节点,则到左子树中查找,如果左子树为空,则当前节点为要找到的父节点;

3)如果大于当前节点则到右子树中查找,如果右子树为空,则当前节点为要找的父节点。

 3.删除

从排序二叉树中删除一个节点,主要有三种情况:

1)节点为叶子节点: 直接删除

2)节点只有一个孩子节点:

删除当前节点,让其子节点与父节点建立链接。

 <span role="heading" aria-level="2">排序二叉树

3)节点有两个孩子节点:

<span role="heading" aria-level="2">排序二叉树

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154662.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • unsupported major.minor version 51.0

    unsupported major.minor version 51.0unsupported major.minor version 51.0

    2022年4月23日
    47
  • (二)selenium的实际运用

    (二)selenium的实际运用

    2021年5月17日
    113
  • python zipfile_Python 学习入门(16)—— zipfile

    python zipfile_Python 学习入门(16)—— zipfilezipfile是python里用来做zip格式编码的压缩和解压缩的,由于是很常见的zip格式,所以这个模块使用频率也是比较高。zipfile里有两个非常重要的class,分别是ZipFile和ZipInfo,在绝大多数的情况下,只需要使用这两个class就可以。1)ZipFile是主要的类,用来创建和读取zip文件;2)ZipInfo是存储的zip文件的每个文件的信息的。1)简单应用如果你仅…

    2022年9月17日
    3
  • css绝对定位与相对定位结合使用_css定位方法

    css绝对定位与相对定位结合使用_css定位方法css绝对定位与相对定位结合使用1、绝对定位与相对定位绝对定位使元素的位置与文档流无关,因此不占据空间。这一点与相对定位不同,相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。相对定位是一个非常容易掌握的概念。如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素“相对于”它的起点进行移动。—(w3cSchool)…

    2025年6月20日
    4
  • mysql逻辑删除案例_实现数据逻辑删除的一种方案

    mysql逻辑删除案例_实现数据逻辑删除的一种方案什么是逻辑删除所谓逻辑删除是指数据已经“不需要”了,但是并没有使用delete语句将这些数据真实的从数据库中删除,而只是用一个标志位将其设置为已经删除。为什么需要逻辑删除对数据进行逻辑删除,一般存在以下原因:防止数据误删除,不能找回数据;这些数据还具有一定的商业价值,比如用户的注册信息;虽然这些数据可以删除,但是这些数据还有关联数据,这些关联数据不能删除。对数据进行逻辑删除,可以保证数据的安全性和…

    2022年6月2日
    127
  • 模仿新浪微博随便看看的软件_随便看看而已的微博

    模仿新浪微博随便看看的软件_随便看看而已的微博效果图目标:(1)掌握ListView控件的使用;(2)理解Adapter的作用并掌握自定义FruitAdapter的使用方式步骤:1.首先在插入代码,为的是实现效果代码如下:  2.新建一个xml文件添加代码,实现代码如下:3.java代码MainActivity.javaArticleAdapterMessage.java…

    2025年6月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号