递归方法:
//二叉排序树的查找
//递归
BSTree SearchBST(BSTree T, KeyType 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);//在右子树继续查找
}
非递归方法:
//非递归
BSTNode* Search_BST(BSTree T, KeyType key, BSTNode *&p)
{
//返回指向关键字为key的节点指针,若不存在,返回NULL
p = NULL;//p指向被查找节点的双亲,用于插入和删除操作中
while (T != NULL && key != T->data.key)
{
p = T;
if (key < T->data.key)
T = T->lchild;
else
T = T->rchild;
}
return T;
}
插入操作:
//插入节点
int Insert_BST(BSTree& T, KeyType key)
{
//在二叉排序树T中插入一个关键字为k的结点
if (T == NULL)//原树为空,新插入的记录为根节点
{
T = new BSTNode;
T->data.key = key;
T->lchild = T->rchild = NULL;
return 1;//返回1,表示成功
}
else if(key == T->data.key)//树种存在相同关键字的结点
{
return 0;
}
else if (key < T->data.key)
{
return Insert_BST(T->lchild, key);//插入到T的左子树
}
else
{
return Insert_BST(T->rchild, key);//插入到T的右子树
}
}
二叉排序树的生成
//二叉排序树的构造
void Creat_BST(BSTree &T, KeyType str[],int n)
{
//用关键字数组str[]建立一个二叉树
T = NULL;
int i = 0;
while (i < n)//依次将每个元素插入
{
Insert_BST(T, str[i]);
i++;
}
}
二叉排序树的删除