二叉排序树是一种特殊结构的二叉树,它作为一种表的组织手段,通常被称为
树表。可以作为一种排序和检索的手段。
定义 二叉排序树或是空树,或是具有下述性质的二叉树:其左子树上所有结点的数据值均小于根结点的数据值;右子树上所有结点的数据值均大于或等于根结点的数据值。左子树和右子树又各是一棵二叉排序树。
对二叉排序树,若按中序遍历就可以得到由小到大的有序序列。如上图,中序遍历得:
{2,3,4,8,9,9,10,13,15,18}
二叉排序树的生成
对任意一组数据元素序列{R1,R2,...,Rn},要生成一棵二叉排序树的过程为:
(1)令R1为二叉树的根;
(2)若R2
<R1,令R2为R1左子树的根结点,否则R2为R1右子树的根结点;
(3)对R3,...,Rn结点的插入方法同上。
例,数据元素序列{10,18,3,8,12,2,7,3},其生成二叉排序树的过程如下:
二叉排序树中结点的删除
要求删除一个结点后的二叉树仍是一棵二叉排序树。算法思想,分以下几种情况考虑:
(1)被删除的结点是叶子结点,则只需修改其双亲结点的指针既可;
(2)被删除结点p只有左子树pL或右子树pR,此时只要使左子树pL或右子树pR成为p双亲结点q的左子树或右子树即可。
(3)若被删除结点p的左、右子树均非空,有两种做法:
-
令pL直接链接到q的左(或右)孩子链域上,pR链接到p结点中序前趋结点s上(s是pL最右下的结点);
-
以p结点的直接中序前趋或后继替代p所指结点,然后再从原二叉排序树中删去该直接前趋或后继。