平衡二叉树的旋转及其代码实现
平衡二叉树的构造问题以及为了维护它的平衡所要进行的LL旋转、RR旋转、LR旋转、RL旋转。
一、平衡二叉树的构造
node *insert(node *root, int x) {if (root == 0) {root = &all[total++];root->left = root->right = 0;root->val = x;root->height = 0;} else if (x < root->val) {root->left = insert(root->left, x);if (height(root->left) - height(root->right) == 2) {root = (x < root->left->val) ? LL(root) : LR(root);}} else {root->right = insert(root->right, x);if (height(root->right) - height(root->left) == 2) {root = (x > root->right->val) ? RR(root) : RL(root);}}root->height = max(height(root->left), height(root->right)) + 1;return root;
}
二、LL旋转
所谓LL旋转并不是指旋转方向,而是指新插入导致不平衡的元素位于左子树的左儿子位置,也就是LeftLeft。
看一下这种旋转的示意图:
node *LL(node *k2) {node *k1 = k2->left;k2->left = k1->right;k1->right = k2;k2->height = max(height(k2->left), height(k2->right)) + 1;k1->height = max(height(k1->left), height(k1->right)) + 1;return k1;
}
三、RR旋转
同样LL旋转是指新插入导致不平衡的元素位于右子树的右儿子位置,也就是RightRight。
看一下这种旋转的方式示意图:
node *RR(node *k1) {node *k2 = k1->right;k1->right = k2->left;k2->left = k1;k1->height = max(height(k1->left), height(k1->right)) + 1;k2->height = max(height(k2->left), height(k2->right)) + 1;return k2;
}
四、LR旋转和RL旋转
LR和RL则分别表示位于左子树的右儿子和右子树的左儿子。
1.对于LR旋转,首先将最近的不平衡结点k3的左子树进行RR旋转,再将k3本身进行LL旋转。
node *LR(node *k3) {k3->left = RR(k3->left);return LL(k3);
}
2.对于RL旋转,首先将最近的不平衡结点k3的右子树进行LL旋转,再将k3本身进行RR旋转。
node *RL(node *k1) {k1->right = LL(k1->right);return RR(k1);
}
THE END.
平衡二叉树的旋转及其代码实现相关推荐
- 平衡二叉树的旋转_平衡二叉树的旋转
一.平衡二叉树的定义 为避免树的高度增长过快,降低二叉树的排序性能,规定在插入和删除二叉树结点时,保证任意结点的左右子树高度差的绝对值不大于1.这样的二叉树被称为平衡二叉树(Balanced Bina ...
- leetcode旋转数组 c语言,leetcode explore 初级算法第三题,旋转数组代码实现
leetcode explore 初级算法第三题,旋转数组代码实现.原题链接: 题目分析 因为题目不是很长,这里把题目贴出来: 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. ...
- OpenCV:OpenCV图像旋转的代码
OpenCV图像旋转的代码 cv::transpose( bfM, bfM ) 前提:使用两个矩阵Mat型进行下标操作是不行的,耗费的时间太长了.直接使用两个指针对拷贝才是王道.不知道和OpenCV比 ...
- matlab将图片旋转的代码_空间曲线绕空间直线旋转生成的旋转曲面方程
校内建模的一道题,虽然我认为这么trivial的东西前人早就造好轮子了,但是找遍所有能找到的网络资料.文献都没找到答案,只好自己造了个轮子. 设空间曲线 : 绕 : 旋转得到的曲面方程为 ,则 的方程 ...
- Unity笔记---模拟行星旋转(含代码)
一.模拟行星旋转 1.先创建名字为Sphere的3D object.(如图,是一个球状体.) 2.在Asset里面可以创建 material 给我们刚刚创建的小球增加材质(我们现在所学的materia ...
- Algorithm:树结构(二叉树/多路查找树/字典树)的简介、具体结构(FBT/CBT/BST/BBT/Heap/Huffman、B树/B+树/R树、字典树)及其运算(增删查/遍历/旋转)、代码实现
Algorithm:树结构(二叉树/多路查找树/字典树)的简介.具体结构(FBT/CBT/BST/BBT/Heap/Huffman.B树/B+树/R树.字典树)及其运算(增删查/遍历/旋转).代码实现 ...
- 旋转360 css 动画效果,使用CSS3动画属性实现360°无限循环旋转【代码片段】
使用CSS3的animation动画属性实现360°无限循环旋转. 代码片段: //图片路径自定义 CSS样式书写如下: #change{ position:absolute; right:200 ...
- unity人物旋转移动代码_Unity3D研究院之脚本实现模型的平移与旋转(六)
123 说: 雨松大大,有个问题想请教一下,我用UNET构建了个小场景,在电脑上可以客户端可以连接到服务器,Windows和Linux都可以,发布到安卓缺连不了,这是问什么呢 说: 求教一下,刚刚接触 ...
- 平衡二叉树-AVL c/c++代码实现
参考:https://www.bilibili.com/video/BV1rt411j7Ff?t=703大佬视频 一份代码,代码中有注释,对应着洛谷的**P3369 [模板]普通平衡树** /*Kee ...
最新文章
- 在数据库组件中用业务规则剖析挑选数据
- String.replaceAll() 正则表达式
- 配置系统在开机时启动虚拟机
- python列表的索引算法_Python-确定列表是否对称的算法
- java int 数据类型_Java 基本数据类型
- 给 TComboBox 添加图标 - 回复 heyongan 的问题
- 马云:首批助力欧洲防疫的物资今天到达比利时
- 第三方服务-阿里云视频点播服务java服务端SDK相关代码
- 【李宏毅2020 ML/DL】P15 Why Deep-
- echarts 柱状图如何不顶格_echarts柱状图如何中间对齐而不是底部对齐?
- 数据结构—二叉树的遍历
- 非华为电脑实现多屏协同、一碰传
- 实变函数与泛函数分析学习笔记(三):有界线性算子
- Origin申请、安装和激活手记
- 线下活动报名|增长骇客:如何利用数据「玩」出新意
- MATLAB-数字图像处理 量化
- 机器学习作业(第十八次课堂作业)
- 怎么才能写好技术文档?这是我的全部经验
- 用计算机探索规律有什么知识点5上,用计算器探索规律知识点
- python需要电脑多大内存合适_编程用surface怎么样发(学python要多大内存)