平衡二叉树的插入和旋转

     平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性质的二叉树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡二叉树。

 //关于树的一些概念上的纠正:

1.树的深度是从根节点开始(其深度为1)自顶向下逐层累加的,而高度是从叶节点开始(其高度为1)自底向上逐层累加的。
2.虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。
3.我的理解是:非根非叶结点的深度是从根节点数到它的,高度是从叶节点数到它的
 /*也就是说:从下往上叫高,上往下叫深*/

—————————————————————————————————————————————————————————————————————————————

特点:给定结点数为N的AVL树的最大高度为log2N

最小不平衡子树:指离插入节点最近且以平衡因子的绝对值大于1的节点作为根的子树。 

平衡因子(bf):结点的左子树的深度减去右子树的深度,|bf|<=1;

插入操作:(在平衡二叉树的基础上进行插入操作,二叉树实时为平衡二叉树)

1) 左单旋(LL旋转): 在最小平衡子树根节点平衡因子>=2且在根节点的左孩子的左孩子插入元素,进行左旋(图片中“右旋”->“左旋”):

       

《平衡二叉树的插入和旋转》

 注:70为不平衡的发现者,20为麻烦结点(在发现者左子树的左子树)

2)右单旋(RR旋转): 在最小平衡子树根节点平衡因子>=-2且在根节点的右孩子的右孩子插入元素,进行右旋(图中“左旋”->“右旋”):

《平衡二叉树的插入和旋转》

  注:100为不平衡的发现者,140为麻烦结点(在发现者右子树的右子树)

3) 右左:最小平衡子树根节点(80)的右孩子(100)的左孩子(90)的子节点(95)插入新元素,先绕根节点的右孩子节点(100)右旋,再围根节点(80)左旋:

《平衡二叉树的插入和旋转》

4)左右:基本同上!!

有什么问题可以共同探讨哈,谢谢!

《平衡二叉树的插入和旋转》

    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/passerbyyuan/article/details/51747098
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞