博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
以AVL树为例理解二叉树的旋转(Rotate)操作
阅读量:6830 次
发布时间:2019-06-26

本文共 687 字,大约阅读时间需要 2 分钟。

树旋转是在中的一种子树调整操作, 每一次旋转并不影响对该二叉树进行的结果. 树旋转通常应用于需要调整树的局部平衡性的场合. 树旋转包括两个不同的方式, 分别是左旋转和右旋转. 两种旋转呈镜像, 而且互为逆操作.

 平衡二叉树在进行插入操作的时候可能出现不平衡的情况,AVL树即是一种自平衡的二叉树,它通过旋转不平衡的节点来使二叉树重新保持平衡,并且查找、插入和删除操作在平均和最坏情况下时间复杂度都是O(log n)

 

AVL树的旋转一共有四种情形,注意所有旋转情况都是围绕着使得二叉树不平衡的第一个节点展开的。

 

1. LL型

    平衡二叉树某一节点的左孩子的左子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向右旋转一次即可,如图所示,原A的左孩子B变为父结点,A变为其右孩子,而原B的右子树变为A的左子树,注意旋转之后Brh是A的左子树(图上忘在A于Brh之间标实线)

2. RR型

    平衡二叉树某一节点的右孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时只需要把树向左旋转一次即可,如图所示,原A右孩子B变为父结点,A变为其左孩子,而原B的左子树Blh将变为A的右子树。

3. LR型

      平衡二叉树某一节点的左孩子的右子树上插入一个新的节点,使得该节点不再平衡。这时需要旋转两次,仅一次的旋转是不能够使二叉树再次平衡。如图所示,在B节点按照RR型向左旋转一次之后,二叉树在A节点仍然不能保持平衡,这时还需要再向右旋转一次。

4. RL型

      平衡二叉树某一节点的右孩子的左子树上插入一个新的节点,使得该节点不再平衡。同样,这时需要旋转两次,旋转方向刚好同LR型相反。

转载地址:http://aojkl.baihongyu.com/

你可能感兴趣的文章
波音公司开发最轻金属 99.99%是空气
查看>>
Python执行效率测试模块timei的使用方法与与常用Python用法的效率比较
查看>>
TextureView+SurfaceTexture+OpenGL ES来播放视频(二)
查看>>
adadmin: error while loading shared libraries: libclntsh.so.10.1
查看>>
模式匹配KMP算法
查看>>
《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制
查看>>
学习 easyui 之一:easyloader 分析与使用
查看>>
大页内存(HugePages)
查看>>
extern c
查看>>
【Xamarin挖墙脚系列:配置Mac之间的连接问题】
查看>>
Intel大坑之中的一个:丢失的SSE2 128bit/64bit 位移指令,马航MH370??
查看>>
设置控件全局显示样式 appearance
查看>>
awstats 日志分析工具linux下的安装和使用
查看>>
一些硬盘相关知识
查看>>
创建、删除表
查看>>
Java继承中成员方法的overload(重载/过载)
查看>>
C#的Timer
查看>>
性能测试工具Locust
查看>>
The POM for XXX:jar:${com.ld.base.service.version} is missing, no dependency information available
查看>>
线程管理:守护线程的创建和运行
查看>>