AVLTree旋转实现
2011-01-02 22:05
225 查看
/*
*调整节点的平衡
*
* 入口参数 :a 为最小不平衡因子 ; t 用于存放新的树根
*/
void Rotate(AVLTree *t,AVLTree a) /*
{ * 本人写的此封装旋转的函数包括了六种旋转情况
AVLTree b; * 如下六种:
if(a->bf==2) * A(RR型) A(RL型)
{ * / / / / |
b=a->lchild; * # B # B
if(b->bf==1) * / / / /
{ * # # C #
*t=LL_Rotate(a); * / /
} * # #
else *
{ *
*t=LR_Rotate(a); * A(LL型) A(LR型)
} * / / / /
}//左边不平衡的时候 * B # B #
Else * / / / /
{ * # # # C
b=a->rchild; * / /
if(b->bf==1) * # #
{ *
*t=RL_Rotate(a); *
} * A (RL型) A(LR型)
Else * / / / /
{ * # B B #
*t=RR_Rotate(a); * / / / /
} * # # # #
}//右边不平衡的时候 【上述插入或删除在B左孩子】 【上述插入或删除在B左孩子】
} *
*/
说明:本人本来是没有留意的,仅仅认为有四种。而现在可以清晰的描述上述6种情况,完全是在调试平衡二叉排序树删除节点时候发现的,所以非常的高兴,虽然书上描述四种,但是可以包括六种情况。此函数可以屏蔽旋转,不需要特别的判断,这里特别指出,是因为此函数特别好用,非常方便,希望老师可以满意。
*调整节点的平衡
*
* 入口参数 :a 为最小不平衡因子 ; t 用于存放新的树根
*/
void Rotate(AVLTree *t,AVLTree a) /*
{ * 本人写的此封装旋转的函数包括了六种旋转情况
AVLTree b; * 如下六种:
if(a->bf==2) * A(RR型) A(RL型)
{ * / / / / |
b=a->lchild; * # B # B
if(b->bf==1) * / / / /
{ * # # C #
*t=LL_Rotate(a); * / /
} * # #
else *
{ *
*t=LR_Rotate(a); * A(LL型) A(LR型)
} * / / / /
}//左边不平衡的时候 * B # B #
Else * / / / /
{ * # # # C
b=a->rchild; * / /
if(b->bf==1) * # #
{ *
*t=RL_Rotate(a); *
} * A (RL型) A(LR型)
Else * / / / /
{ * # B B #
*t=RR_Rotate(a); * / / / /
} * # # # #
}//右边不平衡的时候 【上述插入或删除在B左孩子】 【上述插入或删除在B左孩子】
} *
*/
说明:本人本来是没有留意的,仅仅认为有四种。而现在可以清晰的描述上述6种情况,完全是在调试平衡二叉排序树删除节点时候发现的,所以非常的高兴,虽然书上描述四种,但是可以包括六种情况。此函数可以屏蔽旋转,不需要特别的判断,这里特别指出,是因为此函数特别好用,非常方便,希望老师可以满意。
相关文章推荐
- 关于C++类库KYLib: 用C语言实现平衡二叉树(AVL tree)的源码
- 平衡二叉树(AVLTREE,双链表实现)
- 1123. Is It a Complete AVL Tree(AVL树旋转、判断完全二叉树)
- 数据结构——平衡二叉搜索树(AvlTree)的实现
- 数据结构与算法(C#实现)系列---AVLTree(二)
- Java实现平衡二叉树(AVLTree)的构建
- 平衡有序二叉树(AVL Tree)的C++实现
- 数据结构与算法(C#实现)系列---AVLTree(二)
- [置顶] AVL旋转图及其代码的实现
- 数据结构avlTree C++实现
- 平衡二叉查找树插入节点操作( AVLTree ):旋转、调整平衡
- 【证明可用】平衡二叉树(avl tree)的C语言实现
- 平衡搜索树:AVLTree的实现
- AVLTree 二叉平衡树 实现
- Java实现平衡二叉树(AVLTree)的构建
- (PAT)1123.[平衡树旋转] Is It a Complete AVL Tree
- PAT程序设计考题——甲级1066(Root of AVL Tree ) C++实现
- 数据结构和算法------AVLTree的实现
- AVL Tree 平衡二叉树 Java实现
- AVL树实现文件C语言(AVLTree.c)