8.5 二叉排序树

有序线性表在查找时很方便,但是插入和删除操作,会消耗大量的时间,因为插入和删除后,为了保持线性有序,会移动大量的数据。可以用二叉排序树来解决这个问题。

二叉排序树,又称为二叉查找树。它或者是一棵空树,或者具有下列性质的二叉树:

1)若它的左子树存在,则左子树上所有节点的值均小于它的根节点的值;

2)若它的右子树存在,则右子树上所有节点的值均大于它的根节点的值;

3)它的左、右子树也分别为二叉排序树。

构造二叉排序树的目的,并不是为了排序,而是为了提高查找和插入或删除关键字的速度。

二叉排序树以链接的方式存储,保持了链接存储结构在执行插入或删除操作时不用移动元素的有点,只要找到合适的插入和删除位置后,仅需要修改链接指针即可。

8.6 平衡二叉树

在构造二叉排序树的时候,是按数组中元素依次构造的,使其满足二叉树的性质,对于一个正序排列的数组,构造二叉树的时候,会成为右斜的二叉树,没有左子树,这样会影响查找效率。所以构建平衡二叉树。

平衡二叉树:是一种二叉排序树,其中每一个节点的左子树和右子树的告诉差至多等于1

构造原理:每当插入一个节点时,先检查是否因为插入破坏了树的平衡性,若是,则找出最小不平衡树,在保持二叉排序树的前提下,调整最小不平衡子树中各节点之间的链接关系,进行相应的旋转,使之成为新的平衡树。