课程笔记:搜索二叉树

本文深入解析了二叉树、AVL树和SizeBalanced树的基本概念、操作及平衡调整策略。详细介绍了二叉树的插入、删除规则,AVL树的左旋、右旋操作以及四种不平衡情况的处理方法,最后对比了SizeBalanced树的平衡条件和旋转调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

搜索二叉树

它左子树上所有结点的值均小于它的根结点的值,右子树上所有结点的值均大于它的根结点的值

插入时判断根节点,如果小于就插入左子节点,大于插入右子节点,相等不管(搜索二叉树默认没有重复值)

删除时:

1.删除的节点是叶子节点:直接删除

2.删除的节点仅有右子节点:删除后将父节点指向右子节点

3.删除的节点仅有左子节点:删除后将父节点指向左子节点

4.删除的节点有两个子节点:找到右子树的最近最左节点代替

 

二叉平衡(AVL)树

本质是平衡的(封装了左旋和右旋)的搜索二叉树

左旋:设定节点pivot与它的右节点换位并继承其左节点

右旋同理

因为AVL数的左右子树高度相差不超过1,故经常要用到左右旋

四种不平衡情况:

LL型:根节点左孩子的左孩子还有非空节点,根节点的左子树比右子树高2;根节点一次左旋

RR型:根节点右孩子的右孩子还有非空节点,根节点的右子树比左子树高2;根节点一次右旋

LR型:根节点左孩子的右孩子还有非空节点,根节点的左子树比右子树高2;左孩子一次右旋,根节点一次左旋

RL型:根节点右孩子的左孩子还有非空节点,根节点的右子树比左子树高2;右孩子一次左旋,根节点一次右旋

 

1.当删除节点时如果是叶子节点,要先判断删除后是否平衡(先向上遍历高度,再判断)

2.如果删除节点有替代(二叉搜索树中删除的情况2、3),同1,不用管其下子树

3..如果删除节点有替代(二叉搜索树中删除的情况4),右子树的每一个节点都要判断是否平衡

 

Size Balanced树

SB树是一种平衡二叉搜索树,它和红黑树一样是属于阉割性的AVL树,不需要苛求左右子树相差不到1,比较实用

它只要求每棵子树不小于其兄弟的子树大小即可

它也有四种不平衡情况:

                    

1.某某节点的左子树大于兄弟节点的树(LL:4>3): 根节点一次右旋,谁的子树发生平衡就递归执行谁

2.某某节点的右子树大于兄弟节点的树(LR:5>3): 左孩子一次右旋,根节点一次左旋

3.某某节点的右子树大于兄弟节点的树(RL:6>2):   右孩子一次左旋,根节点一次右旋

4.某某节点的右子树大于兄弟节点的树(RR:7>2):   根节点一次左旋

 

便利之处就在于SB树删除时不用管,时间复杂度为O(logN)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值