学习数据结构的第九天(二)(包括有一些还未解决的树的基本知识的问题)

白昼怎懂夜的黑 提交于 2020-04-05 18:43:01

先插入一些关于树的有关知识,完美二叉树,完全二叉树等,为之后学习AVL树,红黑树做点准备。

未解决: 

问题1:如何用avl实现其他的数据结构

问题2:如果是avl树旋转了的话,那么搜索等结构还怎么做呢?就不再是小于走left,大于走right了吗?

问题3:红黑树的具体实现和目的

问题4:关于各种排序的时间复杂度以及排序。

先引入关于树的知识:

添加一个:度为0的节点和度为2的节点的关系是什么?

 

 能够回答这17个问题是关键。

(1) 2的i次方个 (相当于等比数列)   

(2)

 

 Key:这里也就是等比数列求和,求和的意思是:前n项和,因为从0开始的时候,已经是1项了,所以是n+1项

(3)度:结点的子树个数(就是说:某个节点的度 不然就是0 不然就是1  不然就是2)  度分为节点的度和树的度,树的度:意思是所有节点的最大的度

key:也就是注意概念:节点的度和树的度的区别,节点的XX和树的XX,树一般作为统计概念,统计其中最大的

(4)入度和出度是什么概念,入度和出度是图的概念,树是度的概念。

 

 这里讲的是节点V0的入度是2,出度是1. 入V0和出V0,记住,节点的度就是它的子树的个数就对了。

(5)二叉树,每个节点的子树最多有两颗,就是二叉树。  key:因为树的度是2,所以意思是最大的话是2.

(6)完全二叉树    完美二叉树

 

 意思是:完全二叉树可以最后一层 不完全,完美二叉树一定要到完美境界,最后一层也要完全。

(7)

 

我自己认为:二叉搜索树可以不是完全二叉树(原因:如果说它一直是比它小的结构,例如图上),那么的话就不是完全二叉树了。   那么不是完全二叉树,也就不是完美二叉树了。

但是它也可以是完全二叉树

(8)AVL树:自平衡的二叉搜索树,在AVL中任何节点的两个儿子子树的高度最大差别为1,所以它也被称为高度平衡树。 

引入avl树的目的:   它是特殊的二叉搜索树   对于bst而言,它搜索、插入、删除的时间复杂度,其实插入和删除都是要基于这个搜索的,所以说logN的时间复杂度

 

 由于未必满足向左对齐这个特点  所以说avl树也未必是完全二叉树。

(9)所以它也被称为高度平衡树,n个结点的AVL树最大深度约1.44log2n。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。这个方案很好的解决了二叉查找树退化成链表的问题,把插入,查找,删除的时间复杂度最好情况和最坏情况都维持在O(logN)。但是频繁旋转会使插入和删除牺牲掉O(logN)左右的时间,不过相对二叉查找树来说,时间上稳定了很多。

这里说的是AVL树目的,在最坏情况下将查找、插入删除的时间复杂度降为logN

(10)红黑树:

红黑树应用比较广泛:
1.广泛用在C++STL中。mapset都是用红黑树实现的。
2.著名的linux进程调度Completely Fair Scheduler,用红黑树管理进程控制块。
3.epoll在内核中的实现,用红黑树管理事件块
4.nginx中,用红黑树管理timer

原因:
红黑树的查询性能略微逊色于AVL树,因为比AVL树会稍微不平衡最多一层,也就是说红黑树的查询性能只比相同内容的AVL树最多多一次比较,但是,红黑树在插入和删除上完爆AVL树,AVL树每次插入删除会进行大量的平衡度计算,而红黑树为了维持红黑性质所做的红黑变换和旋转的开销,相较于AVL树为了维持平衡的开销要小得多

性质:
1.节点是红色或黑色。
2.根节点是黑色。
3.每个叶子节点都是黑色的空节点(NIL节点)。
4 每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5.从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点。

这个是我复制过来的,红黑树的具体实现和目的我还是不太懂。

 (12)用avl树去实现其他数据结构的目的的话,我个人认为:像Queue可以去用linkedList  是On的复杂度   stack可以用deque,set的话其实也是用linkedList可以实现,直接在头部添加即可。

avl树去实现其他东西的目的,是为了减小其他的东西的搜索、添加、删除的时间复杂度吧。

 (13)一个节点,除了根之外(所以那时候,也可以用index而不是parentIndex来做siftUp的出口),都有一个父节点(有且仅有

(14)从节点n1到节点n2 所需要经历的节点的路径。(也就是说两个节点之间可能路径是带权的嘛,所以说路径的总和)

(15)规定根结点在0层,其他任一结点的层数是其父节点的层数加1

(16)树的深度,是所有节点层次的最大值。

(17)度为0的节点和度为2的节点的关系

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!