码迷,mamicode.com
首页 > 其他好文 > 详细

平衡二叉树

时间:2015-07-27 22:40:55      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

学习平衡二叉树的关键在于何谓不平衡?

然后如何将不平衡转化为平衡?

那么,该如何旋转?

旋转哪里?

了解如何旋转首先要了解何时需要旋转?

要将下面数据建成平衡二叉树

多画几遍,应该能了解:

 

何谓不平衡?

               左边比右边重,或者右边比左边重。bf值的绝对值>1。旋转前必须该子树每个节点的bf都同为负或同为正。

 

如何旋转?

                左边重就向右旋,右边重就向左旋。

 

旋转哪里?

                从哪里开始不平衡,就旋转哪个子树。

 

 

 

a[10] = {3,2,1,4,5,6,7,10,9,8}

 

/*二叉树的二叉链表节点结构定义*/
typedef struct BiTNode
{
    int data;
    int bf;                     /*平衡因子*/
    struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

 

 右旋操作代码,写的很精妙。

/*对以p为根的二叉排序树右旋处理*/
/*处理之后p指向新的树根节点,即旋转处理之前的左子树的根节点*/
void R_Rotate(BiTree *p)
{
    BiTree L;
    L=(*p)->lchild;
    (*p)->lchild = L->child;
    L->rchild=(*p);
    *p = L;
}

左旋操作代码

void L_Rotate(BiTree *p)
{
    BiTree R;
    R = (*p)->rchild;
    (*p)->rchild = R->lchild;
    R->lchild=(*p);
    *p=R;
}

 

平衡二叉树

标签:

原文地址:http://www.cnblogs.com/rixiang/p/4681364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!