平衡二叉树(Balanced Binary Tree)
Posted 二狗Code俱乐部
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了平衡二叉树(Balanced Binary Tree)相关的知识,希望对你有一定的参考价值。
<What is Balanced Binary Tree?>
<二叉排序树BST>
在此之前,说说二叉排序树BST(也叫二叉查找树,大家别看叫做二叉排序树,其实设计它是为了提高查找插入删除关键字的速度。)二叉排序树简单通俗粗暴的来说,就是左子树上的结点关键字值都小于根结点关键字值,右子树上的结点关键字值都大于根结点关键字值。das heisst,您对这样的二叉排序树进行中序遍历,就可以得到一个递增的有序序列啦。
fig1一<( ̄) ̄)↗[GO!]二叉排序树
<二叉平衡树BBT>
今天要说的平衡二叉树,是为了避免树的高度长的太快,比如单支树那样。我们规定任意结点的左右子树高度差不超过1.,这样的二叉树就是平衡二叉树。那么这样的左右子树高度差呢,我们称其为平衡因子。所以平衡因子只可以有三个取值,{-1,0,1}.我这里简单画一个。
fig2平衡二叉树,中间的数值就是平衡因子
<论平衡二叉树的自我调整>
——斯坦尼斯拉夫斯基
我们主要聊的就是当我们往二叉排序树中插入或删除一个结点时,首先要看看是不是打破了原先的平衡。不速之客啊。如果打破了汉东省原有的政治生态。怎么办,我们要调整。先找到陈岩石老同志——先找到插入路径上离插入结点最近的平衡因子绝对值大于1的结点“陈岩石”。再对以“陈岩石”为根的子树,在保持二叉排序树的特性前提下,调整、巩固、充实、提高。
注意每次调整的对象都是最小不平衡子树,就是我们刚才说的最近的陈岩石那里开始。我们下面举几个例子就知道了。
fig3插入和调整
fig4 check this out.这个师长还是没变啊,Interesting.
当然,我们插入后失去平衡一般可以归纳为4种情况,上面举的例子是LR旋转。
还有
(1) LL平衡旋转(右单旋转),就是在“陈岩石”根结点的左孩子(L)的左子树(L)上插入了新结点。
(2) RR旋转(左单旋转),Ross&Rachel~
(3) LR旋转(先左后右双旋转) (4)RL旋转(先右后左双旋转)~~~相信大家通过举得栗子就可以举一反三了。
good night everyone~
以上是关于平衡二叉树(Balanced Binary Tree)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 110 Balanced Binary Tree(平衡二叉树)(*)
[Leetcode] Balanced binary tree平衡二叉树
LeetCode 110. 平衡二叉树 Balanced Binary Tree (Easy)