邓俊辉数据结构与算法学习笔记-第七章

强颜欢笑 提交于 2020-10-23 06:43:17


day40

7 二叉搜索树

7a. 概述

在这里插入图片描述BST: 二叉搜索树 ; BBST:平衡二叉搜索树
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

7b

7b-1 BST查找

在这里插入图片描述在这里插入图片描述在这里插入图片描述_hot记忆节点的语义:总是指向命中节点的父亲

7b-2 BST插入

在这里插入图片描述在这里插入图片描述上面插入算法的复杂度不会超过O(h),h为树的高度

7b-3 BST删除

在这里插入图片描述在这里插入图片描述上图为removeAt的可能情况之一:要删除的节点(69)有一颗子树为空,对应代码实现如下:
在这里插入图片描述上述①处代码也能够处理删除节点的左右孩子都不存在的情况
在这里插入图片描述寻找要删除节点(36)的直接后继(40)(直接后继:二叉树中不小于当前节点的最小的值),然后交换二者,因为(40)是(36)的直接后继,所以可以保证原本节点(40)所处的位置是没有左子树的,这样就转换成了第一种情况。具体实现如下:
在这里插入图片描述


7c 平衡与等价

在这里插入图片描述前面的查找,插入,删除的复杂度都不会超过O(h),但是如果这棵树退化成了List,复杂度也会变成O(n),n为元素个数
在这里插入图片描述第一种生成方法:随机生成关键码序列,总共有n!种序列。由此得到的n!棵BST,平均树高为 logn
在这里插入图片描述第二种生成方法:随机组成,将每个节点看成积木,考察能够拼出多少种结构互异的BST,计算算出能够得到Catalan(n)棵互异的BST,平均树高为O(√n)
综合考虑,第二种方法更为可信,因为第一种方法不同的关键码可能会对应相同的BST结构,如上图最右边的一棵树。我们也可以看出,中位数或者接近中位数的的节点被越早的插入,树的高度会相应的更低。
在这里插入图片描述在这里插入图片描述在这里插入图片描述大圈代表BST.一棵BBST一系列动态操作,可能不再是BBST,应该采用什么方法,将其再次变为BBST?(等价变换)
在这里插入图片描述如上图,树的拓扑结构不同,而树的中序遍历相同的两颗BST,称为等价的BST
在这里插入图片描述在这里插入图片描述局部性:每次操作在树的局部,保证操作只需要常量时间O(1)
进行一次转换,累计需要操作的次数不要超过O(logn)
day42







7d-1 AVL树重平衡

在这里插入图片描述CBT:完全二叉树;①重平衡的标准;②重平衡的技巧
在这里插入图片描述某个节点平衡因子 = 左子树高度 - 右子树高度 ;注意空树的高度为-1.
在这里插入图片描述S(h):高度为h的树的规模
在这里插入图片描述在这里插入图片描述插入操作可能导致多个祖先失衡,但其后续重平衡操作很简单,而删除操作虽然只会导致一个祖先失衡,但其后续的重平衡操作更复杂。


7d-2 AVL树插入删除重构

在这里插入图片描述在这里插入图片描述zig、zag到底怎么操作
在这里插入图片描述在这里插入图片描述参考教材7-17题
在这里插入图片描述在这里插入图片描述_hot为当前当前节点父节点
在这里插入图片描述在这里插入图片描述AVL树拓扑结构变化量太高,后续要学习的红黑树,,无论是删除还是插入操作,都可以将变化量控制在O(1)
connect34 构思
在这里插入图片描述在这里插入图片描述在这里插入图片描述这样设计可以更加鲁棒的适应各种情况的重构(单旋、双旋)
在这里插入图片描述完成代码,开始第八章






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