平衡二叉树
来源:互联网 发布:台湾 香港 知乎 编辑:程序博客网 时间:2024/06/16 19:23
ACM模版
构建平衡二叉树
#define LH 1#define EH 0#define RH -1// 结点typedef struct BiTNode{ int data; int bf; struct BiTNode *lchild, *rchild;} BiTNode, *BiTree;// 右旋void R_Rotate(BiTree *p){ BiTree L; L = (*p)->lchild; (*p)->lchild = L->rchild; L->rchild = (*p); *p = L; return ;}// 左旋void L_Rotate(BiTree *p){ BiTree L; L = (*p)->rchild; (*p)->rchild = L->lchild; L->lchild = (*p); *p = L; return ;}// 左边深旋转void LeftBalance(BiTree *T){ BiTree L, Lr; L = (*T)->lchild; switch (L->bf) { case LH: (*T)->bf = L->bf = EH; R_Rotate(T); // 右旋即可 break; case RH: Lr = L->rchild; switch (Lr->bf) { case LH: (*T)->bf = RH; L->bf = EH; break; case EH: (*T)->bf = L->bf = EH; break; case RH: (*T)->bf = EH; L->bf = LH; break; } Lr->bf = EH; L_Rotate(&(*T)->lchild);// 先左旋 R_Rotate(T); // 后右旋 break; } return ;}// 右边深旋转void RightBalance(BiTree *T){ BiTree L, Ll; L = (*T)->rchild; switch (L->bf) { case RH: (*T)->bf = L->bf = EH; L_Rotate(T); // 左旋即可 break; case LH: Ll = L->lchild; switch (Ll->bf) { case LH: (*T)->bf = RH; L->bf = EH; break; case EH: (*T)->bf = L->bf = EH; break; case RH: (*T)->bf = EH; L->bf = LH; break; } Ll->bf = EH; R_Rotate(&(*T)->rchild);// 先右旋 L_Rotate(T); // 后左旋 break; } return ;}// 插入AVL结点bool InsertAVL(BiTree *T, int e, bool *taller){ if (!*T) { *T = (BiTree)malloc(sizeof(BiTNode)); (*T)->data = e; (*T)->lchild = (*T)->rchild = NULL; (*T)->bf = EH; *taller = true; } else { if (e == (*T)->data) // 已经存在e { *taller = false; return false; } if (e < (*T)->data) // 小于data向左递归 { if (!InsertAVL(&(*T)->lchild, e, taller)) { return false; } switch ((*T)->bf) { case LH: // 左边深,插入前需要旋转 LeftBalance(T); *taller = false; break; case EH: // 平衡,插入后变为左边深 (*T)->bf = LH; break; case RH: // 右边深,插入后变为平衡 (*T)->bf = EH; *taller = false; break; } } else // 大于data向右递归 { if (!InsertAVL(&(*T)->rchild, e, taller)) { return false; } switch ((*T)->bf) { case LH: // 左边深,插入后变为平衡 (*T)->bf = EH; *taller = false; break; case EH: // 平衡,插入后变为右边深 (*T)->bf = RH; break; case RH: // 右边深,插入前需要旋转 RightBalance(T); *taller = false; break; } } } return *taller;}
0 0
- 平衡二叉树平衡法则
- 二叉树--二叉平衡树
- 平衡二叉树的
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉查找树
- 平衡二叉树 详解
- 平衡二叉树
- 平衡二叉树
- AVL 平衡二叉树
- 平衡二叉树
- 平衡二叉树-红黑树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- 平衡二叉树
- ELK收集Nginx日志,使用grok正则表达式(二)
- 巴蜀2830 数列
- android studio 生成release.aar
- 大型网站架构演化发展
- 自定义ImageView实现局部截图功能
- 平衡二叉树
- 94. Binary Tree Inorder Traversal
- 鉴别电脑真实的核心数
- Rodgexue
- js文件中使用el表达式问题
- 【Maven】使用Maven搭建web3.0版本的web项目
- 如何设置listview 某个item不可点击,即没有背景变色的效果
- LayoutInflater到底是如何工作的
- eclipse maven 导出项目依赖的jar包