大话数据结构学习笔记 - 查找之二叉排序树(Binary Sort Tree
)及其C
实现
二叉排序树
二叉排序树(Binary Sort Tree
):又称为 二叉查找树, 它或者是一个空树,或者是具有下列性质的二叉树
- 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值
- 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
- 它的左、右子树也分别为二叉排序树
二叉排序树主要是为了提高查找和插入删除关键字的速度
二叉树结构
/* 二叉树的二叉链表结点结构定义 */
typedef struct BiTNode /* 结点结构 */
{
int data; /* 结点数据 */
struct BiTNode *lchild, *rchild; /* 左右孩子指针 */
}BiTNode, *BiTree;
查找
/*
* 递归查找二叉排序树 T 中是否存在 key, 指针 f 指向 T 的双亲, 其初始调用值是 NULL. 若查找成功, 则指针 p 指向该数据元素结点, 并返回 TRUE
* 否则 指针 p 指向查找路径上访问的最后一个结点并返回 FALSE
*
*/
Status SearchBST(BiTree T, int key, BiTNode *f, BiTNode **p)
{
if(!T) /* 查找不成功 */
{
*p = f;
return FALSE;
}
else if(key == T->data) /* 查找成功 */
{
*p = T;
return TRUE;
}
else if(key < T->data)
return SearchBST(T->lchild, key, T, p); /* 在左子树中继续查找 */
else
return SearchBST(T->rchild, key, T, p); /* 在右子树中继续查找 */
}
插入
/*
* 当二叉排序树 T 中不存在关键字等于 key 的数据元素时, 插入 key 并返回