二叉排序树: 又称二叉查找树
- 二叉排序树的定义:
- 若左子树不空,则左子树上所有结点的值均小于他的根结点的值;
- 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
- 它的左右子树均为二叉排序树;
- 一个重要的性质: 中序遍历二叉树可以得到一个结点值递增的有序序列
----二叉排序树的二叉链表存储表示------
typedef struct
{
KeyType key;//关键字项
InfoType otherinfo; //其他数据项
}ElemType; //每个结点的数据域的类型
typedef struct BSTNode
{
ElemTYpe data; //每个结点的数据域包括关键字和其他数据项
struct BSTNode * lchild,*rchild; //左右孩子指针
}BSTNode,*BSTree;
2.二叉排序树的查找:
递归查找
- 若二叉排序树为空,则查找失败,返回空指针;
- 若二叉排序树非空,将给定值key与根结点的关键字T->data.key进行比较:
若key等于T->data.key,则查找成功,返回根结点地址;
若key小于T->data.key,则递归查找左子树;
若key大于T->data.key,则递归查找右子树;
BSTree SearchBST(BSTree T,KeyType key)
{ //在根指针T所指的二叉排序树中递归查找某关键字等于key的数据元素
//若查找成功,则返回指向该数据元素节点的指针,否则返回空指针
if(!T)||key==T->data.key) return T; //查找结束
else if (key<T->data.key) return SearchBST(T->lchild,key); //在左子树中继续查找
else return SearchBST(T->rchild,key); //否则在右子树中查找