课程笔记:树

搜索二叉树

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

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

删除时:

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

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

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

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

二叉平衡(AVL)树

扫描二维码关注公众号,回复: 4931800 查看本文章

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

左旋:设定节点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)

猜你喜欢

转载自blog.csdn.net/weixin_41328649/article/details/86489295
今日推荐