标签:
学习平衡二叉树的关键在于何谓不平衡?
然后如何将不平衡转化为平衡?
那么,该如何旋转?
旋转哪里?
了解如何旋转首先要了解何时需要旋转?
要将下面数据建成平衡二叉树
多画几遍,应该能了解:
何谓不平衡?
左边比右边重,或者右边比左边重。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