平衡二叉树平衡维护时的条件

来源:12-5 左旋转和右旋转的实现

禅与编码

2020-01-03

平衡二叉树平衡维护时的条件:
if (balanceFactor > 1 && getBalanceFactor(node.left) >= 0)
return rightRotate(node);
if (balanceFactor < -1 && getBalanceFactor(node.right) <= 0)
return leftRotate(node);

后面的条件getBalanceFactor(node.left) >= 0,getBalanceFactor(node.right) <= 0 必要吗?在什么情况下满足前面的条件而不满足后面的?

写回答

1回答

liuyubobobo

2020-01-03

我是不是没有特别理解你的问题。


注意:balanceFactor 和 getBalanceFactor(node.left) 描述的是两个节点的平衡因子。balanceFactor 描述的是 node 的平衡因子;getBalanceFactor(node.left) 描述的是 node 的左孩子的平衡因子。


以 if (balanceFactor > 1 && getBalanceFactor(node.left) >= 0) 为例:


如果 node 是 0。

以下例子是 balanceFactor > 1 && getBalanceFactor(node.left) >= 0

      3
     / \
    2   4
   / 
  1
 /
0


以下例子是 balanceFactor > 1 && getBalanceFactor(node.left) < 0

    2
   / \
  0   4
   \
    3
   /
  1


对于上面的情况,仅仅右旋转不够,在后续会具体介绍如何处理。


继续加油!:)

0
3
禅与编码
非常感谢!
2020-01-29
共3条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程