二叉排序树的实现

Posted 1360175655z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉排序树的实现相关的知识,希望对你有一定的参考价值。

二叉排序树的实现

1.1. 编写SearchBST(T, key)与InsertBST(T, key)的伪代码,并实现;

InsertBST(T, key){
if(T为空)
{创建一个新结点BSTNode;
T=key=k;
p->lchild=p->rchild=NULL;}
else if(k=T值){return 0;}
else if(T值>k){插入到左子树中}
else if(T值<k){插入到右子树中}
}
SearchBST(T, key){
if(T为空||T->key==k){
return T;}
if{T值>k){在左子树中递归查找}
else{在右子树中递归查找}

实现:

InsertBST(T, key){
if(T==NULL)
{T=new BSTNode;
T=key=k;
p->lchild=p->rchild=NULL;}
else if(k=T->key){return 0;}
else if(T->key>k){return InSertBST(p->lchild,k);}
else if(T->key<k){return InSertBST(p->rchild,k);}
}
SearchBST(T, key){
if(T==NULL||T->key==k){
return T;}
if{T->key>k)
{return SearchBST(T->lchild,k);}
else{return SearchBST(T->rchild,k);}

2. 编写CreateBST(T)的伪代码实现从控制台输入创建BST树。最后使用代码实现。使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,并中序输出该BST

CreateBST(T){
初始化T为空树;
关键字下标设为i=0while(i<n){调用插入函数;}
return T;
}

实现:

BSTNode* CreateBST(int A[],int n){
BSTree T=NULL;
int i=0while(i<n){InesertBST(T,A[i]); i++;}
return T;
}

 

3. 编写DeleteBST(T, key)的伪代码实现从T中删除关键字key。如果无法编写出来,请写出在BST中删除关键字key所需注意的事项

DeleteBST(T, key){
创建一个新结点*q;
if(T->rchild不为空){递归找被删结点的左子树的前驱节点}
else{
将关键字赋给T
将左子树的根节点放在被删结点位置上
q指针指向被删结点,释放其空间
} }

注意事项:

在删除时必须先进行查找操作;删除结点时不能把以该结点为根的子树删除掉。

4. 选做:使用代码实现

void DeleteBST(BSTNode *p, BSTNode *&r){
BSTNode
*q; if(T->rchild!=NULL){
DeleteBST(p,r->rchild)} else{
p->key=r->key
;q=r;
r=r->lchild;
free(q);} }

 

以上是关于二叉排序树的实现的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段

二叉排序树的实现

二叉排序树的实现

排序:Java实现大顶堆和二叉树的广度优先遍历原理及代码注释详解

二叉排序树的实现(部分功能

二叉排序树的实现