//定义数据结构
typedef int KeyData; //假设的关键字类型
typedef struct Node //节点
{
KeyData密钥;
struct Node * Lchild,* Rchild;
} BSTNode,* BSTree;
// 1.基于二叉树的排序搜索的非递归实现(也可以使用递归函数解决)
BSTree SearchBST(BSTree bst,键类型K)
{
BSTree q;
q = bst;
同时(q)
{
如果(q-> KeyK)
返回q;
否则(kKey)q = q-> Lchild;
否则q = q->里尔德(Rchild);
}
返回NULL;
}
//基于二叉树的排序搜索的递归实现
BSTree SearchBST(BSTree bst,键类型K)
{
如果(!bst)返回NULL;
否则(Kbst-> Key)返回bst;
否则,如果(KKey)返回SearchBST(bst-> Lchild,K);
elsereturn SearchBST(bst-> Rchild,K);
}
// 2.二进制排序树的插入操作
void InsertBST(BSTree * bst,键类型K)
{
BiTree s;
如果(* bst == NULL)
{
s =(BSTree)malloc(sizeof(BSTNode));
s->键= K;
s-> Lchild = NULL;
s-> Rchild = NULL;
* bst = s;
}
否则if((K 键)InsertBST(&(((* bst)-> Lchild),K);
否则(if(K>(* bst)->键)InsertBST(&(((* bst)-> Rchild)二叉排序树的建立c,K);
}
//创建二进制排序树
无效CreateBST(BSTree * bst)
{
KeyType键;
* bst = NULL;
scanf(“%d”和键);
同时(键!= ENDKEY)
{
InsertBST(bst,密钥);
scanf(“%d”,&Key);
}
}
//删除二进制排序树的操作
BSTree * DelBST(BSTree bst,键类型K)
{
BSTree * p,* f二叉排序树的建立c,* s,* q;
p = bst;
f = NULL;
while§
{
如果(p-> KeyK)中断;
f = p;
否则(kKey)p = p-> Lchild;
else p = p-> Rchild;
}
如果(pNULL)返回bst;
如果(p-> LchildNULL)
{
如果(fNULL)bst = p-> rchild;
否则(f-> lchild == p)f-> Lchild = p-> Rchild;
else f-> Rchild = p-> Rchild;
免费§;
}
其他
{
q = p;
s = p-> Lchild;
同时(s-> rchild)
{
q = s;
s = s-> Rchild;
}
如果(q == p)q-> Lchild = s-> Lchild;
elseq-> Rchild = s-> Lchid;
p->键= s->键;
免费(s);
}
返回bst;
}
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-147257-1.html