树形结构的概念_护理理论四个基本概念

树形结构的概念_护理理论四个基本概念转自:https://blog.csdn.net/zhangyuan19880606/article/details/51220561树型结构的基本概念对大量的输入数据,链表的线性访问时间太慢,不

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

转自:https://blog.csdn.net/zhangyuan19880606/article/details/51220561

树型结构的基本概念

对大量的输入数据,链表的线性访问时间太慢,不宜使用。本文探讨另外一种重要的数据结构—-树,其大部分时间可以保证操作的运行平均时间复杂度为O(logN),第一部分先来看一下树的一些预备知识。

首先看一下树形结构的样子,下图代表的是树型结构的一般形态:

树形结构的概念_护理理论四个基本概念

由上图看得出树是一些节点的集合,总结一下树的一些基本概念:

1、结点:树中的数据元素都称之为结点

2、根:最上面的结点称之为根,一颗树只有一个根且由根发展而来,从另外一个角度来说,每个结点都可以认为是其子树的根

3、父亲:结点的上层结点,如图中,结点K的父亲是E、结点L的父亲是G

4、兄弟:具有相同父亲的结点称为兄弟,图中F、G、H互为兄弟

5、结点的度:结点所拥有的子树的个数称之为结点的度,如结点B的度为3

6、树叶:度为0的结点,也叫作终端结点,图中D、K、F、L、H、I、J都是树叶

7、分支结点:度不为0的结点,也叫作非终端结点或内部结点,图中根、A、B、C、E、G都是分支结点

8、结点的层次:从根节点到树中某结点所经路径上的分支树称为该结点的层次,根节点的层次规定为1,其余结点的层次等于其父亲结点的层次+1

9、树的深度:树中结点的最大层次数,图中树的深度为4

 

二叉树

上面的是树的一般形态,下面看一下二叉树。二叉树是一棵树,其中每个结点都不能有多于两个子树。

下图展示了一颗二叉树:

树形结构的概念_护理理论四个基本概念

二叉树的一个性质是一颗平均二叉树的深度要比及结点个数N小得多,这个性质很重要,尤其对于特殊类型的二叉树即二叉查找树而言,其深度的平均值是O(logN),这将大大降低查找时的时间复杂度。

当然,二叉树在运用得不好的情况下的情况下是有严重的问题的,即:

树形结构的概念_护理理论四个基本概念

树的深度大到了N-1,这样的情况是绝对不允许的,这种树也被称为不平衡树。在下一部分的二叉查找树说明完之后,会讲让二叉树带有自平衡条件,成为平衡树。

 

二叉查找树

二叉树的一个重要应用是在它们查找中的使用。假设树中的每个结点存储一项数据,使得二叉树成为二叉查找树的性质是:对于树中的每个结点X,它的左子树中所有项的值小于X,而它的右子树中所有项的值大于X,这意味着该树所有的元素可以用某种一致的方式排序。

如下图:

树形结构的概念_护理理论四个基本概念

这就是一个二叉查找树。但是如果我这么修改一下:

树形结构的概念_护理理论四个基本概念

这就不是一个二叉查找树了,因为在根节点的左子树中,有一个节点是11。

 

AVL树

前面已经讲到过了,在生成二叉树/二叉查找树的时候是非常容易失衡的,造成的最坏的情况就是一边倒(只有左子树/右子树),这样将会导致树的检索效率大大降低,所以为了维持二叉树的平衡,大牛们提出了各种实现的算法,如:AVL树、节点大小平衡树(SBT)、伸展树、树堆(Treap)、红黑树等等。

这里讲AVL树—-一种带有平衡条件的二叉查找树,这种平衡条件必须要容易保持,而且它保证树的深度必须是O(logN)。

对于AVL树来说,它的平衡必须满足以下特征之一:

1、空树

2、每个结点的左子树和右子树深度最多差1

可以看一下下图:

树形结构的概念_护理理论四个基本概念

图中,左边的树是AVL树,右边的树不是。因为很显然,从根结点7看起,右子树的深度为1,而左子树7–>2–>4–>5(3)这条路径深度为3,不满足每个结点的左子树和右子树深度最多差1的条件。

可以证明,一颗AVL树的高度最多为1.44 * log(N + 2) – 1.328,但是实际上的高度只略大于logN。

 

红黑树

红黑树是对AVL树的另一种变种。红黑树顾名思义就是结点是红色或者黑色的平衡二叉树,它通过颜色的约束来维持着二叉树的平衡。下图为一颗典型的二叉树:

树形结构的概念_护理理论四个基本概念

对于一颗有效的红黑树而言我们必须增加如下规则:

1、每个结点都只能是红色或者黑色

2、根节点是黑色

3、每片叶子都是黑色的

4、如果一个结点是红色的,则它的两个子节点都是黑色的,也就是说在一条路径上不能出现相邻的两个红色结点

5、从任意一个结点到其每个叶子的所有路径都包含着相同数目的黑色结点

这些约束强制了红黑树的关键性质:从根到叶子的最长的可能路径不多于最短的可能路径的两倍长。结果就是这棵树大致上是平衡的,因为插入、删除和查找某个值得最坏情况时间都要求与树的高度成比例,这个高度理论上限允许红黑树只在最坏情况下都是高效的。

再具体就不说了,可以参看http://www.cnblogs.com/yangecnu/p/Introduce-Red-Black-Tree.html,对红黑树的讲解写得非常好。

对了,TreeMap和TreeSet就是红黑树的典型实现

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

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

(0)
上一篇 2022年8月3日 上午11:36
下一篇 2022年8月3日 上午11:36


相关推荐

  • MemWatch的使用「建议收藏」

    MemWatch的使用「建议收藏」博主的新Blog地址:http://www.brantchen.com欢迎訪问:)      linux下的測试工具真是少之又少,还不好用,近期试用了memwatch,感觉网上的介绍不太好,所以放在这里跟大家分享 。事实上大部分都是看的帮助,非常多地方翻译得不好还有错,请原谅指出最好看原文。假设转载或引用,请注

    2022年7月13日
    19
  • 本地部署劝退?我们找到了跑通OpenClaw的最短路径

    本地部署劝退?我们找到了跑通OpenClaw的最短路径

    2026年3月13日
    2
  • 《画解数据结构》(0 – 1)- 算法时间复杂度[通俗易懂]

    《画解数据结构》(0 – 1)- 算法时间复杂度[通俗易懂]《算法和数据结构》学习前的开胃小文

    2022年5月14日
    54
  • 编程语言数值型和字符型数据的概念

    编程语言数值型和字符型数据的概念在编程语言中区分变量的数据类型 最简单的是数值型和字符型 以 SQL 为例 新建一个表如下图 name 列是字符型 age 列是数值型 保存表名为 pp 录入如下图的数据 看这里 name 列输入的 123 789 这些是字符型的数据 age 输入的内容是数值型 显示结果如下 因为 age 列是数值型 输入的 009 自动变为了 9 写查询语句时字符型数据按语法规则是用引号括起来 如果如下图写也可以运行出结果 是因为 sqlserver 本身具有一定的智能识别功能 写比较长的 SQL 语句

    2026年3月18日
    2
  • vue 父组件调用子组件的函数_vue子组件触发父组件方法

    vue 父组件调用子组件的函数_vue子组件触发父组件方法1、使用场景项目里将element-ui的el-upload写成公共组件方便调用,官方的before-upload方法用于处理上传前要做的事,如:比较文件大小,限制文件类型等,通过返回true或false控制是否上传。当该组件调用父组件方法,并且要能获取到父组件方法的返回值,如何实现?2、问题说明通常子组件调用父组件方法:this.$emit(方法名,传参1,传参2),但是此方法…

    2026年4月17日
    5
  • java 常量关键字_Java 常量 关键字final

    java 常量关键字_Java 常量 关键字final利用关键字 final 指示常量 publicclassC publicstatic String args finaldoubleC PER INCH 2 54 doublepaperW 8 5 doublepaperL 11 System out println Papersizeinc

    2026年3月17日
    3

发表回复

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

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