树
1 二叉搜索树
1.1 什么是二叉搜索树
树动态性比较强,插入删除比较方便
1.2 二叉搜索树的查找操作
从编译角度来看,尾递归都可以用循环来写
要让树尽可能平衡,也就是平衡二叉树
1.3 二叉搜索树的插入
改为return后和查找很像
1.4 二叉搜索树的删除
左子树的最大元素一定没有右儿子
右子树的最小元素一定没有左儿子
2 平衡二叉树
2.1 什么是平衡二叉树
(b)的效果较好
如何衡量平衡?
- 左右2边高度差不多
- 左右2边节点数差不多
上面的图:
- 第一个 结点3左2右0
- 第三个 结点7左3右1
(高度指路径的长度)
2.2 平衡二叉树的调整
插入一个结点后可能会使原来平衡的二叉树不平衡了,所以要调整
RR旋转
因为BL 的值比A大比B小所以挂到A右子树
示例1:
做RR旋转:
实例2:
也是插在右子树的右子树上,所以也要做RR旋转
扫描二维码关注公众号,回复:
12596400 查看本文章
LL旋转
插在左子树的左子树上(左右孩子节点都可以)
被破坏者不一定就认准了根节点
也可以不是,虽然根节点也被破环了
LR旋转
插在左子树的右子树(左右孩子皆可)
找ABC中的一个中间值,A>C>B,即C放到根节点
错选B应选C
如果把6认为是被破坏点,则LL后还是不平衡的
所以要把1认为是被破坏点
RL旋转
例:
Mar被破环了,Jan没被破环,进行LR旋转
May被破环了,进行RR旋转
插入Sept依旧平衡
也就是说动那个结点前要先计算平衡因子
3 小白专场:是否同一棵二叉搜索树
2. 先比较根节点(即第1个值),然后就变为了比较左右子树
flag:判断一个序列是不是跟树一致。如果某个节点没被访问过,则flag设为0,被访问过设为1。
3,然后是2,在3 1 4 2构造的树里找,发现3和2之间隔了一个1没有出现过,所有是不一致的
读到2check(T,V)=0就return 0了,后面的4,1会被当成下一个序列