数据结构学习-平衡二叉树
来源:互联网 发布:数据库是按一定的结构 编辑:程序博客网 时间:2024/06/05 05:30
#2017-12-20 13:30
#武汉工程大学邮电与信息工程学院邮科院校区
#软件工程1604谷子毅
typedef struct AVLNode *Position;typedef Position AVLTree; /* AVL树类型 */struct AVLNode{ ElementType Data; /* 结点数据 */ AVLTree Left; /* 指向左子树 */ AVLTree Right; /* 指向右子树 */ int Height; /* 树高 */};
int Max ( int a, int b ){ return a > b ? a : b;}
AVLTree SingleLeftRotation ( AVLTree A ){ /* 注意:A必须有一个左子结点B */ /* 将A与B做左单旋,更新A与B的高度,返回新的根结点B */ AVLTree B = A->Left; A->Left = B->Right; B->Right = A; A->Height = Max( GetHeight(A->Left), GetHeight(A->Right) ) + 1; B->Height = Max( GetHeight(B->Left), A->Height ) + 1; return B;} AVLTree DoubleLeftRightRotation ( AVLTree A ){ /* 注意:A必须有一个左子结点B,且B必须有一个右子结点C */ /* 将A、B与C做两次单旋,返回新的根结点C */ /* 将B与C做右单旋,C被返回 */ A->Left = SingleRightRotation(A->Left); /* 将A与C做左单旋,C被返回 */ return SingleLeftRotation(A);} /*************************************//* 对称的右单旋与右-左双旋请自己实现 *//*************************************/ AVLTree Insert( AVLTree T, ElementType X ){ /* 将X插入AVL树T中,并且返回调整后的AVL树 */ if ( !T ) { /* 若插入空树,则新建包含一个结点的树 */ T = (AVLTree)malloc(sizeof(struct AVLNode)); T->Data = X; T->Height = 0; T->Left = T->Right = NULL; } /* if (插入空树) 结束 */ else if ( X < T->Data ) { /* 插入T的左子树 */ T->Left = Insert( T->Left, X); /* 如果需要左旋 */ if ( GetHeight(T->Left)-GetHeight(T->Right) == 2 ) if ( X < T->Left->Data ) T = SingleLeftRotation(T); /* 左单旋 */ else T = DoubleLeftRightRotation(T); /* 左-右双旋 */ } /* else if (插入左子树) 结束 */ else if ( X > T->Data ) { /* 插入T的右子树 */ T->Right = Insert( T->Right, X ); /* 如果需要右旋 */ if ( GetHeight(T->Left)-GetHeight(T->Right) == -2 ) if ( X > T->Right->Data ) T = SingleRightRotation(T); /* 右单旋 */ else T = DoubleRightLeftRotation(T); /* 右-左双旋 */ } /* else if (插入右子树) 结束 */ /* else X == T->Data,无须插入 */ /* 别忘了更新树高 */ T->Height = Max( GetHeight(T->Left), GetHeight(T->Right) ) + 1; return T;}
补充:
AVLTree SingleRightRotation (AVLTree A){ AVLTree B=A->Right; A->Right=B->Left; B->Left=A; A->Height=Max(GetHeight(A->Left),GetHeight(A->Right))+1; B->Height=Max(GetHeight(B->Right),A->Height)+1;}
AVLTree DoubleRightLeftRotation(AVLTree A){ A->Ringht=SingleLeftRotation(A->Right); return SingleRightRotation(A);}
阅读全文
0 0
- 数据结构学习-平衡二叉树
- 数据结构学习笔记-平衡二叉树实现
- 数据结构 - 平衡二叉树
- 数据结构: 平衡二叉树
- 数据结构 平衡二叉树
- 【数据结构】平衡二叉树
- 数据结构&&平衡二叉树
- 数据结构--平衡二叉树
- 数据结构--平衡二叉树
- 数据结构---平衡二叉树
- 数据结构--平衡二叉树
- 数据结构 平衡二叉树
- 数据结构-平衡二叉树
- 数据结构之平衡二叉树
- 数据结构 - 平衡二叉树 AVL
- 数据结构之 平衡二叉树
- 【数据结构】平衡二叉树_AVLTree
- 数据结构之平衡二叉树
- HTTPS的APP如何抓包
- MyBatis实战第一讲
- Excel之Vlookup操作
- JAVASE之反射,properties初识
- 指针
- 数据结构学习-平衡二叉树
- Cmake编译caffe
- 点分法IP地址和网络二进制表示的转换
- 无名飞控
- 咸鱼日记12.13——第一行代码java
- Zig-Zag(Z型)填数
- rabbitMQ 知识详解
- 整形平台新氧的商标纠纷案背后:商标是创业公司命根子
- 数组循环队列