平衡二叉树
特点: 任意节点左右子树的高度不超过1
反例:
10节点的左子树高度为0,右子树高度为3
这是平衡二叉树
这也是平衡二叉树
如何保持平衡
添加一个节点后,该树不再是平衡二叉树-》旋转
左旋,多余左节点做右节点
复杂的左旋
10的多余左节点9。给予前父节点7作为右节点
右旋 ,多余右节点做左节点
复杂右旋
4的多余右节点5,给予前父节点7作为左节点
需要旋转的4种情况
左左
根节点的左子树的左子树(在这张图上指{2}的分支)
有节点插入,导致不平衡。
左子树{4}的分支
左子树的左子树 {2}的分支
注意,{2}->{3}也是左左的情况
一次右旋就可以平衡
左右
根节点的左子树的右子树(图中指{5}的分支)
有节点插入,导致二叉树不平衡
一次右旋之后,没有平衡,再继续左旋右旋操作也没有平衡
回归最初状态
先进行局部左旋(紫色部分),转化为左左
一次整体右旋后,平衡
右右
根节点的右子树的右子树(图中{11}的分支)
有节点插入,导致二叉树不平衡
经过一次左旋平衡
右左
根节点的右子树的左子树(图中指{9}的分支)
有节点插入,导致二叉树不平衡
局部右旋,转化为右右
经过整体左旋,平衡
总结
标签:左子,右子,右旋,二叉树,平衡,节点 From: https://www.cnblogs.com/HIK4RU44/p/18031301平衡二叉树
- 任意节点的左右子树的高度差不超过1的二叉树
平衡二叉树保持平衡的方法
左旋
提升第一个失衡的节点为父节点
原父节点降级为失衡节点的左节点
失衡节点多余的左节点成为原父节点的右节点
右旋
提升第一个失衡的节点为父节点
原父节点降级为失衡节点的右节点
失衡节点多余的右节点成为原父节点的左节点
平衡二叉树不平衡的4个情况
左左
根节点左子树的左子树中插入节点后导致的不平衡
经过一次右旋解决
左右
根节点左子树的右子树中插入节点后导致的不平衡
先经过一次局部左旋,转化为左左
再经过一次整体右旋解决
右右
根节点右子树的右子树中插入节点后导致的不平衡
经过一次左旋解决
右左
根节点右子树的左子树中插入节点后导致的不平衡
先经过一次局部右旋,转化为右右
再经过一次左旋解决