一.二叉排序树定义
二叉排序树(Binary Sort Tree)或者是一棵空树;或者是具有下列性质的二叉树:
我们知道一颗基本的二叉树他们都需要满足一个基本性质--即树中的任何节点的值大于它的左子节点,且小于它的右子节点。所有结点只有左子树叫左斜树
左右子树也都是二叉排序树。
由图9.4 可以看出,对二叉排序树进行中序遍历,便可得到一个按关键码有序的序列,因此,一个无序序列,可通过构一棵二叉排序树而成为有序序列。
二.二叉排序树查找过程
从其定义可见,二叉排序树的查找过程为:
若查找树为空,查找失败。
查找树非空,将给定值kx 与查找树的根结点关键码比较。
若相等,查找成功,结束查找过程,否则,
a.当给kx 小于根结点关键码,查找将在以左子女为根的子树上继续进行,转①
b.当给kx 大于根结点关键码,查找将在以右子女为根的子树上继续进行,转①
以二叉链表作为二叉排序树的存储结构,则查找过程算法程序描述如下:
typedef struct NODE
{ ElemType elem; /*数据元素字段*/
struct NODE *lc,*rc; /*左、右指针字段*/
}NodeType; /*二叉树结点类型*/
【算法9.4】
int SearchElem(NodeType *t,NodeType **p,NodeType **q,KeyType kx)
{ /*在二叉排序树t 上查找关键码为kx 的元素,若找到,返回1,且q 指向该结点,p 指向其父结点;*/
/*否则,返回0,