- 确定违规节点的位置
每个节点Z均有一个称之为平衡因子Bf的域,它用来存储(左子树的高度-右子树的高度)所得的值,合法的取值只有-1,0,1三种,一旦出现其他值则表示以节点Z为根的子树不是一颗平衡树,此时需要进行调整。
根据二叉查找树的插入规则找到节点Z应该插入的正确的位置,插入后将节点Z的平衡因子置为0,此时节点Z给它的父节点产生了一个增量,如果节点Z是左孩子那么对父节点的平衡因子进行加1操作,否则进行减1操作,如果此时父节点的平衡因子的值非0,那么它又对它的父节点产生一个增量,重复以上步骤直到找到第一个违规节点的位置,此时违规节点的平衡因子的绝对值大于1,为了描述方便我们将违规节点命名为节点A。上述判断流程如下:
退出后判断节点Z的父节点的平衡因子是否为0,若是则此树已经平衡,否则父节点即为违规节点。
2.调整二叉树使之平衡
违规节点为A,节点A的左孩子为B,右孩子为C。分下面几种情况进行调整:
(1).节点A的平衡因子为2
(i).节点B的平衡因子为1,如图所示:</