您的位置:首页 > 其它

平衡二叉树的插入和旋转

2016-06-23 22:10 337 查看

     平衡二叉树定义(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)左右:基本同上!!
有什么问题可以共同探讨哈,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: