首页 > 其他 > 详细

学习数据结构的第十天

时间:2020-04-06 12:13:43      阅读:59      评论:0      收藏:0      [点我收藏+]

以下分析代码,分析的目的是知道它什么时候去旋转,用什么操作实现旋转

第二个目的是:知道这个旋转之后,它还怎么去遍历呢?

 

我觉得第二个目的大概略有点懂,就算是旋转后,它的节点仍然是满足二叉搜索树的性质的,只是更加平衡了而已。

所以说对于二叉搜索树的查找等操作是不变的。

 

先开始读一遍代码,之后再写。

技术分享图片

 

 

首先就是在node上,需要添加一个height字段,表示高度是多少。

并且node上保存的是key和value.  目的是更加灵活,让key和value进行分离,key是多少,value是多少这样。

技术分享图片

 

 

是否为二分搜索树,就是让其中序遍历之后,遍历完之后看数组里面的元素是不是按照从小到大的顺序排布的。

如果说是按从小到大的顺序排布的就是二分搜索树了。

技术分享图片

 

 这里说的是函数:  是否平衡的函数。

如果说是空树,那么认定这是一颗平衡的树了。

技术分享图片

 

 得到平衡因子的函数:左子树的高度减去右子树得到平衡因子,即左边的高度减去右边的高度作为平衡的因子了。

原因:这里统一认定是左边减右边,然后的话是否平衡的时候,是取绝对值,所以这个确实不用怕。

技术分享图片

 

 这里说的是:

右旋转的情况,肯定是LL的情况下需要右旋转的。

那么右旋转:无论旋转什么,都需要把node节点的每个字段都得进行考虑的。

所以说height字段也需要更新。

 

技术分享图片

 

 对于leftRotate这个函数的定义也是要知道,node旋转之后的根!

技术分享图片

 

 也就是对于当前的factor进行分析,对于左边的factor也进行分析。

技术分享图片

 

 删除bst的时候,删除节点的三种情况得记得。

技术分享图片

 

 对于avl树,什么时候进行旋转:  当增加或者删除的时候需要进行旋转。

这个isBST没在哪个地方用到,但是的话自己知道就是:   isBST的意义:教会我:如何去判定一棵树是不是二叉搜索树,就看中序遍历之后,这棵树是不是按照大小顺序排布的。

但是实际上是不是涉及到:树的话,如果说一种遍历是不能确定一棵树的吧,至少通过两种遍历方法吧?

下面一章自己去实现avl树。

学习数据结构的第十天

原文:https://www.cnblogs.com/startFrom0/p/12639818.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!