详解红黑树之左旋右旋
为什么要左旋右旋?
为了使得左右子树的高度差在一定范围内,需要通过旋转调整,这样就可以保持平稳的搜索效率
左旋:
步骤
1.设原来E的父节点是father,那么左旋之后需要改变的是:
2.S和father的关系(若无father则不需要)
3.S和E的关系
4.E和between E and S的关系
实现代码:
void tree::L_rotate(node *p)
{node* father = p->p_parent;node* pr = p->p_Rchild;node* prl = pr->p_Lchild;if(p == root){// p and prpr->p_Lchild = p;p->p_parent = pr;// p and prlif(prl != nullptr){p->p_Rchild = prl;prl->p_parent = p;}elsep->p_Rchild = nullptr;// pr is rootpr->p_parent = nullptr;root = pr;}else{// father and prif(father->p_Rchild == p)father->p_Rchild = pr;elsefather->p_Lchild = pr;pr->p_parent = father;// p and prpr->p_Lchild = p;p->p_parent = pr;// p and prlif(prl != nullptr){p->p_Rchild = prl;prl->p_parent = p;}elsep->p_Rchild = nullptr;}
}
右旋:
步骤与左旋对称,不再赘述
实现代码:
void tree::R_rotate(node *p)
{node* father = p->p_parent;node* pl = p->p_Lchild;node* plr = pl->p_Rchild;if(p == root){// p and plpl->p_Rchild = p;p->p_parent = pl;// p and plrif(plr != nullptr){p->p_Lchild = plr;plr->p_parent = p;}elsep->p_Lchild = nullptr;// pl is rootpl->p_parent = nullptr;root = pl;}else{// father and plif(father->p_Rchild == p)father->p_Rchild = pl;elsefather->p_Lchild = pl;pl->p_parent = father;//p and plpl->p_Rchild = p;p->p_parent = pl;// p and plrif(plr != nullptr){p->p_Lchild = plr;plr->p_parent = p;}elsep->p_Lchild = nullptr;}
}
详解红黑树之左旋右旋相关推荐
- HashMap 数据结构之红黑树, 红黑树在什么时候左旋 右旋 如何旋转
树结构是数据结构中最经典最常用的结构之一,也是面试中常问的面试题,最近学习了一下红黑树的知识,记录整理一下 文章目录 一.红黑树的特征 二.变色左旋和右旋 1.变色规则 2.左旋 3.右旋 总结 前言 ...
- nyoj202 红黑树 (二叉树的左旋右旋)
题目202 题目信息 运行结果 本题排行 讨论区 红黑树 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 什么是红黑树呢?顾名思义,跟枣树类似,红黑树是一种叶子是黑色果子 ...
- 平衡二叉树的左旋右旋详解 看不懂你打我
平衡二叉树的左旋右旋 看不懂你打我 左旋右旋的操作 为什么要左旋右旋 左旋右旋能保持排序二叉排序树的性质吗 下次写平衡二叉树的LL.RR.LR.RL. 左旋右旋的操作 1.左旋:对X节点左旋,即以X的 ...
- 红黑二叉树的左旋右旋和变色
小白解析红黑树的基本 什么是红黑树 变色 右旋 什么是右旋呢? 左旋 什么情况下会左旋 什么是红黑树 这就是一个简单的红黑二叉树 红黑二叉树有以下几条基本的规则: 1. 节点分为红色或者黑色. 2.根 ...
- 左旋右旋问题一次搞定!!!
左旋右旋问题的解决 编程思想 1.在左右旋函数中实现该函数功能首先要想好如何存放移位后的字符元素 2.左旋时将字符串首元素赋给临时变量tmp而后将字符串元素依次前移一位 3.将tmp的值再赋给字符串的 ...
- 字符串左旋右旋——三步旋转法和移相法
题目:实现一个函数,可以左旋字符串中的k个字符. AABCD左旋一个字符得到ABCDA AABCD左旋两个字符得到BCDAA 方法一:三步旋转法 左旋程序思路:首先根据画图得知左旋后的结果,然后在分析 ...
- avl树左旋右旋的理解
一直没搞懂非平衡二叉树变平衡二叉树时左旋右旋,今天下定决心搞懂,然后在众多博客中终于找到了这样一篇,非常形象,记录如下: AVL树是最先发明的自平衡二叉查找树.在AVL树中任何节点的两个子树的高度最大 ...
- 从底层原理出发详解红黑树在Linux内核中的3种经典用法,让你知其所以然
从底层原理出发详解红黑树在Linux内核中的3种经典用法,让你知其所以然丨进程管理|内存管理|sk_buff|B树|B+树 视频讲解如下,点击观看: 从底层原理出发详解红黑树在Linux内核中的3种经 ...
- 字符串的左旋右旋问题(C语言实现,三种方法求解)
字符串左旋右旋问题其实是同理的,下边以左旋为例: 方法一 思路:左旋一次就是将整个字符串向左移一个字符,第一个字符(arr[0])移动到最右侧.这样循环操作左旋次数就是最终左旋结果,如上图所示. 实现 ...
最新文章
- 路由器和交换机的综合实验
- 特殊字符、Date、JS应用
- 软件工程结构化建模的方法和工具_2020年6月——北京大学《软件工程》笔记
- 学python买什么书好-学python3什么书好
- jQuery控制tab标签页
- C#中的三种委托方式:Func委托,Action委托,Predicate委托
- VS2005 there is no source code available for the current location 解决方案
- linux中打开gif图片命令,在Linux终端中安装使用Gifski创建GIF动图
- MySQL Data Manipulation Statements
- 7——1 shelve 模块
- 程序员30多岁了还单身的原因
- KITTI数据集评估方法小结
- c 导出html表格数据格式文件,将html网页导出excel表格数据/如何将html页面中的表格导出到excel表格...
- nadcházející basketbalové boty velkoobchodní další
- 编程需要知道多少数学知识?
- 一度智信:拼多多店铺怎么盈利
- VM Tools 安装
- LM324LM358放大器的设计问题
- 解读阿里精准推广的核心算法
- 浮动IP的绑定 、释放、移除