c语言程序构造二叉排序树,C语言实现二叉排序树的相关操作

adea9c46487c8f563eeee8eb0c077ffc.png

本文链接:

1e891a43f3d1c7978d3691bdf7d10b78.png

二叉排序树(Binary Sort Tree)c语言 二叉排序树,又称为二叉查找树。它或则是一颗空树,或者是带有以下性质的二叉树:

03330ec49a5eaab0f324fa33d918e755.png

构造二叉排序树的目的,并不是为了顺序,而是为了提升查找和插入删除关键字的速度。

09a8ce33c10490b8ab645d15909315.jpg

以下程序在DEV C++中安装运行通过。

img_1_3505939222D148940721_26.jpg

#include

#include

/*二叉树的二叉链表结点结构定义*/

typedef struct BiTNode

{

int data;

struct BiTNode *lchild,*rchild;

}BiTNode,*BiTree;

/*递归查找二叉排序树T中是否存在key,指针f指向T的双亲,其初始调用值为NULL,若查找成功,则指针P指向该数据元素结点,并返回1,否则指针p指向查找路径上访问的最后一个节点并返回0*/

int SearchBST(BiTree T,int key,BiTree f,BiTree *p)

{

if(!T)//查找不成功

{

*p=f;

return 0;

}

else if(key==T->data)//查找成功

{

*p=T;

return 1;

}

else if(keydata)

return SearchBST(T->lchild,key,T,p);//在左子树继续查找

else

return SearchBST(T->rchild,key,T,p);//在右子树继续查找

}

/*当二叉排序树T中不存在关键字等于key的数据元素时,插入key并返回1,否则返回0*/

int InsertBST(BiTree *T,int key)

{

BiTree p,s;

if(!SearchBST(*T,key,NULL,&p))//查找不成功

{

s=(BiTree)malloc(sizeof(BiTNode));

s->data=key;

s->lchild=s->rchild=NULL;

if(!p)

*T=s;//插入s为新的根结点

else if(keydata)

p->lchild=s;//插入s为左孩子

else

p->rchild=s;//插入s为右孩子

return 1;

}

else

return 0;

}

/*若二叉排序树T中存在关键字key的数据元素时,则删除该数据元素节点,并返回1;否则返回0*/

int DeleteBST(BiTree *T,int key)

{

if(!T)

return 0;

else

{

if(key==(*T)->data)

return Delete(T);

else if(keydata)

return DeleteBST(&(*T)->lchild,key);

else

return DeleteBST(&(*T)->rchild,key);

}

}

int Delete(BiTree *p)

{

BiTree q,s;

if((*p)->rchild==NULL)//右子树为空只需重接它的左子树

{

q=*p;*p=(*p)->lchild;free(q);

}

else if((*p)->lchild==NULL)

{

q=*p;*p=(*p)->rchild;free(q);

}

else//左右子树均不空

{

q=*p;s=(*p)->lchild;

while(s->rchild)

{

q=s;s=s->rchild;

}

(*p)->data=s->data;

if(q!=*p)

q->rchild=s->lchild;

else

q->lchild=s->lchild;

free(s);

}

return 1;

}

int main()

{

int i,j;

int a[10]={62,88,58,47,35,73,51,99,37,93};

BiTree T=NULL,p;

//二叉排序树的插入和创建

for(i=0;i<10;i++)

{

InsertBST(&T,a[i]);

}

j=SearchBST(T,51,NULL,&p);

if(j=1)

printf("搜索51成功!");

j=DeleteBST(&T,47);

if(j=1)

printf("删除47成功!");

}运行结果如图所示。

df3d1da14de586bee8139617bc9e6ce1.png

二叉排序树的查找性能取决于二叉排序树的颜色c语言 二叉排序树,二它的外形是不确定的。极端右斜树的查找时间复杂度为O(n),等同于顺序查找;而平衡二叉树的查找时间复杂度为O(logn),等同于折半查找。

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-120513-1.html

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:1024 设计师:我叫白小胖 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值