排序二叉树

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

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

排序二叉树

一、基本概念

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

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

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

对每个节点而言:

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 关于adventure的短语_adventureinwellies

    关于adventure的短语_adventureinwelliesdown了个AdventureWorks2008的数据库备份,没办法谁让一些书上用这个库作为示例呢。主要差别是Person表格,搞不清楚为什么MS在搞什么。用MS提供的安装文件,就是装不上。还有很多人提到那个FileStream的设置,可是根本没用。

    2022年9月12日
    0
  • 高斯分布例题_高斯定理求半球面球心电场

    高斯分布例题_高斯定理求半球面球心电场给定心形曲线(x2+y2−1)3=x2y3(x^2+y^2-1)^3=x^2y^3,给定任意一点的坐标(X,Y)(X,Y)其中X~N(X,σx)X~N(X,\sigma_x),Y~N(Y,σy)Y~N(Y,\sigma_y)求点(X,Y)(X,Y)落入心形曲线内的概率。思路:以(X,Y)(X,Y)为中心,画出3∗σ3*\sigma半径的椭圆,求和心形曲线相交的体积。注意:心形曲线方程可化为x

    2022年10月16日
    0
  • FM &FFM:深入理解FM与FFM「建议收藏」

    FM &FFM:深入理解FM与FFM「建议收藏」0.引言针对类别变量进行oner-hot编码后的高维稀疏矩阵M,可以表示如下:可以看出,经过One-Hot编码之后,大部分样本数据特征是比较稀疏的,One-Hot编码的另一个特点就是导致特征空间大。例如,电影品类有550维特征,一个categorical特征转换为550维数值特征,特征空间剧增。同时通过观察大量的样本数据可以发现,某些特征经过关联之后,与label之间的相关…

    2022年6月3日
    24
  • 软件著作权的源代码_手机桌面整理软件

    软件著作权的源代码_手机桌面整理软件《(最新整理)软件著作权-源代码范本》由会员分享,可在线阅读,更多相关《(最新整理)软件著作权-源代码范本(127页珍藏版)》请在人人文库网上搜索。1、完整)软件著作权-源代码范本(完整)软件著作权-源代码范本编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)软件著作…

    2022年9月2日
    2
  • Python源码保护[通俗易懂]

    Python源码保护[通俗易懂]1混淆改方法主要将函数、类名以及变量名等替换为其他符号,提高了阅读的难度,Python代码混淆网站。但该方法未改变程序的主体结构,实际效果并不是很好。具体如下图1所示:2pycpython是先把源码py文件编译成pyc或者pyo,然后由python的虚拟机执行。最简单的加密方法是将编译后的pyc二进制文件发布,详情可以参考blog。但与其他语言一样编译后的产生的pyc依然可以通过反编译得…

    2022年8月23日
    3
  • 关于左右连接「建议收藏」

    关于左右连接「建议收藏」首先来看一下两张主要的表:persons表orders表现在我们希望列出所有的人,以及他们的定购。SELECTpersons.last_name,persons.first_name,orders.order_noFROMpersonsLEFTJOINordersONpersons.pid=orders.pidORDER

    2022年9月18日
    0

发表回复

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

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