平衡二叉树(Self-Balancing Binary Search Tree),是一种二叉排序树,其中每个结点的左子树和右子树的高度差为-1,0,1之中的某个值。
二叉平衡树又称为AVL树。
平衡因子BF是指二叉树上结点的左子树深度减去右子树深度的值。
只要二叉树上有一个结点的平衡因子的绝对值大于1,则该二叉树就是不平衡的。
平衡二叉树构建的基本思想是在构建二叉排序树的过程中,每当插入一个结点时,先检查是否因插入二破坏了树的平衡性,若是,则找出最小不平衡子树。在保持二叉树特性的前提下,调整最小不平衡子树之间的链接关系,进行相应的旋转,使之称为新的平衡子树。
当最小不平衡子树根结点的BF大于1时,右旋,小于-1时,左旋。插入结点后,最小不平衡子树的BF与它的子树的BF符号相反时,就需要先对结点进行一次旋转以是的符号相同后,再反向旋转一次才能够完成平衡操作。
以下程序在DEV C++中调试运行通过。
#include<stdio.h>
#include<stdlib.h>
#define LH 1
#define EH 0
#