AVL树,平衡二叉树的LL,LR ,RR,RL旋转
来源:互联网 发布:肖像权网络侵权管辖 编辑:程序博客网 时间:2024/06/04 23:23
//////////////////////////////////////////////////////////////
////////////创建平衡二叉树的调整
////////////@xomlee 20131227#include <stdio.h>
#include <Windows.h>typedef struct AVLTree
{
int data;
struct AVLTree *LTree;
struct AVLTree *RTree;
struct AVLTree *parent;
}AVLTree;AVLTree * ROOT = NULL;
//////////////////////////////////////////////////////////////
////////////创建平衡二叉树
void InsertBi_Tree(AVLTree **tree,int nInsertValue)
{
if (*tree == NULL) // 判断 NULL 树
{
(*tree) = (AVLTree*)malloc(sizeof(AVLTree));
(*tree) ->data = nInsertValue;
(*tree) ->LTree = NULL;
(*tree) ->RTree = NULL;
(*tree) ->parent = NULL;
return;
}AVLTree * temp = (*tree);
while(true)
{
if(temp ->data > nInsertValue) // 放在左边
{
if (temp ->LTree == NULL)
{
temp ->LTree= (AVLTree*)malloc(sizeof(AVLTree));
temp ->LTree ->parent = temp;
temp ->LTree ->data = nInsertValue;
temp ->LTree ->LTree = NULL;
temp ->LTree ->RTree = NULL;
break;
}
else
{
temp = temp ->LTree;
}
}
else
{
if (temp->RTree == NULL)
{
temp ->RTree = (AVLTree*)malloc(sizeof(AVLTree));
temp ->RTree ->parent = temp;
temp->RTree->data= nInsertValue;
temp->RTree->LTree = NULL;
temp->RTree->RTree = NULL;
break;
}
else
{
temp = temp->RTree;
}
}
}
}//////////平衡二叉树的调整=========LL && LR=============================
//判断是左不平衡还是右不平衡,将不平衡的结点传进去,调整完返回传进来的子树AVLTree * changeBiTreeWeight_r(AVLTree *pTree)
{
AVLTree *LchildTree ;
LchildTree = pTree ->LTree;//标记传进来的结点的左孩子pTree ->LTree = LchildTree ->RTree;//改变根节点的左孩子
LchildTree ->RTree = pTree;//调整左孩子的右子树if(NULL == pTree ->parent)
{
pTree = LchildTree;
}
else if(pTree ->parent ->LTree == pTree)
{
pTree ->parent ->LTree = LchildTree ;//改变父亲节点}
else
{
pTree ->parent ->RTree = LchildTree;
}LchildTree ->parent = pTree ->parent;
pTree ->parent = LchildTree;if(pTree ->LTree)
{
pTree ->LTree ->parent = pTree;
}
return LchildTree;
}
AVLTree * changeBiTreeWeight_l(AVLTree *pTree)
{
AVLTree *RchildTree ;
RchildTree = pTree ->RTree;//标记传进来的结点的you孩子pTree ->RTree = RchildTree ->LTree;//改变根节点的you孩子
RchildTree ->LTree = pTree;//调整you孩子的zuo子树if(NULL == pTree ->parent)
{
pTree = RchildTree;
}
else if(pTree ->parent ->RTree == pTree)
{
pTree ->parent ->RTree = RchildTree ;//改变父亲节点}
else
{
pTree ->parent ->LTree = RchildTree;
}RchildTree ->parent = pTree ->parent;
pTree ->parent = RchildTree;if(pTree ->RTree)
{
pTree ->RTree ->parent = pTree;
}
return RchildTree;
}AVLTree * createBitree(AVLTree *tree)
{InsertBi_Tree(&tree,4);
InsertBi_Tree(&tree,2);
InsertBi_Tree(&tree,5);
InsertBi_Tree(&tree,1);
InsertBi_Tree(&tree,3);return tree;
}void MyPrint(AVLTree *pTree)
{
if(pTree)
{
MyPrint(pTree ->LTree);
printf("%d ",pTree ->data);
MyPrint(pTree ->RTree);
}
}int main()
{
AVLTree * root = NULL;
root = createBitree(root);
MyPrint(root);
printf("\n======================\n");root = changeBiTreeWeight_l(root);
MyPrint(root);
printf("\n======================\n");//root = changeBiTreeWeight_r(root);
//MyPrint(root);
return 0;
}
- AVL树,平衡二叉树的LL,LR ,RR,RL旋转
- AVL树的旋转LL RR LR RL
- AVL树的平衡调整,LL,LR,RR,RL旋转 (二)
- AVL树的LR和RL旋转
- 平衡二叉树(AVL树)的平衡旋转
- AVL平衡二叉树旋转说明
- AVL 平衡二叉树旋转方法
- AVL平衡树的旋转
- AVL平衡树的旋转
- AVL树的旋转平衡
- 平衡二叉树中的AVL树的旋转
- 平衡二叉树(AVL树,AVL树旋转)
- AVL树(高度平衡的二叉搜索树)平衡因子的调节和旋转
- 关于平衡二叉树(AVL tree)旋转后平衡标志调整的计算公式
- AVL 平衡二叉树
- 平衡二叉树(AVL)
- 平衡二叉树(AVL)
- AVL 平衡二叉树
- spring的事务管理
- beaglebone black上如何安装摄像头
- 深入Java核心:JVM中的栈和局部变量
- 题目1080:进制转换
- Doctrine中定义表之间的关系
- AVL树,平衡二叉树的LL,LR ,RR,RL旋转
- 求数列的和
- java反射详解
- 【问题解决】用户登录问题
- 水仙花数
- presentModalViewController deprecated in ios6
- 各个开放平台的灵异事件
- 使用eagle导出国内PCB制板商可用的gerber文件
- 使用Mule发布Web Service服务