------更快的搜索储存结构-----平衡二叉树-----------------
2016-01-20 12:16
232 查看
上一节咱们已经说过了,树的深度越深,时间复杂度也就越高。所以我们要想办法让树的深度尽量的小。
所以就产生了平衡二叉树这种东西。(什么是平衡二叉树实在是不想写了,不知道咋回事写了两次丢了两次。)
原来的时候我们有一颗很平衡的二叉树,但是现在我们进行插入元素操作就会破坏原先的二叉树使其的左右子树的深度绝对值差不是小于等于一了。
所以---我们今天就是解决这个问题的,现在开始正课
---------------------平衡二叉树的调整--------------------
在我们平衡二叉树的时候要注意的一件很重要的事情是,不论我们怎样操作,都需要保证在操作之后,二叉树还是搜索二叉树。否则就没用了。
不平衡的“被破坏者”是mar,“破坏者”是nov,nov在被破坏者右子树的右边,所以该插入称为RR插入,需要RR旋转
(右单旋)
我们首先进行正常的插入操作然后找出破坏者和被破坏者。
然后开始发现关系破坏者在被破坏者右子树的右子树上所以称为RR旋转。
这个的话也是RR旋转
下面附上LL旋转
附上 最操蛋的LR旋转。
然后是RL旋转
上面说了四种旋转方式分别是RR,LL,RL,LR。所有的旋转都可以分成这四类,在我们进行平衡二叉树这个操作的时候,我们就需要看被破坏者和破坏者之间的关系,根据他们的关系去调整 被破坏者到破坏者的沿途三个节点。即可。。。。。。
所以就产生了平衡二叉树这种东西。(什么是平衡二叉树实在是不想写了,不知道咋回事写了两次丢了两次。)
原来的时候我们有一颗很平衡的二叉树,但是现在我们进行插入元素操作就会破坏原先的二叉树使其的左右子树的深度绝对值差不是小于等于一了。
所以---我们今天就是解决这个问题的,现在开始正课
---------------------平衡二叉树的调整--------------------
在我们平衡二叉树的时候要注意的一件很重要的事情是,不论我们怎样操作,都需要保证在操作之后,二叉树还是搜索二叉树。否则就没用了。
不平衡的“被破坏者”是mar,“破坏者”是nov,nov在被破坏者右子树的右边,所以该插入称为RR插入,需要RR旋转
(右单旋)
我们首先进行正常的插入操作然后找出破坏者和被破坏者。
然后开始发现关系破坏者在被破坏者右子树的右子树上所以称为RR旋转。
这个的话也是RR旋转
下面附上LL旋转
附上 最操蛋的LR旋转。
然后是RL旋转
上面说了四种旋转方式分别是RR,LL,RL,LR。所有的旋转都可以分成这四类,在我们进行平衡二叉树这个操作的时候,我们就需要看被破坏者和破坏者之间的关系,根据他们的关系去调整 被破坏者到破坏者的沿途三个节点。即可。。。。。。
相关文章推荐
- C#-gridview中选择一行时取得该行的第一列字段
- android 点击、滑动事件的处理 GestureDetector
- 从MVC到前后端分离
- 日经春秋 20160120
- 【Swift 2.1】为 UIView 添加点击事件和点击效果
- 4. Qt的容器类
- INSERT into ... on duplicate key update ...
- 中根非递归遍历二叉树
- js中event.keyCode用法及keyCode对照表
- HashMap, HashSet, HashMap Iterator
- 目标检测之rcnn---开启检测新高度优于dpm
- 【解惑】选择做程序员是对还是错
- Mysql开启慢查询
- 天声人語 20160120 あきれた廃棄カツ横流し
- 【Ubuntu】升到14,攻克了进入用户后没有菜单条导航栏的问题
- javascript 数组 排除null, undefined, 和不存在的元素
- 基本排序算法
- 节点类
- ant发送邮件
- Word2010插入页码分节符