王朝知道
分享
 
 
 

谁能给我一个二叉树的算法?含有插入结点,删除结点,和查找方法.

王朝知道·作者佚名  2012-06-30  
宽屏版  字体: |||超大  
 
分类: 电脑/网络 >> 程序设计 >> 其他编程语言
 
参考答案:

#include <alloc.h>

#define ERROR 0;

#define FALSE 0;

#define TRUE 1;

#define OK 1;

typedef int ElemType;

typedef int Status;

typedef int KeyType;

#define EQ(a,b) ((a)==(b))

#define LT(a,b) ((a)< (b))

#define LQ(a,b) ((a)<=(b))

typedef struct BinaryTree

{

ElemType data;

struct BinaryTree *l;

struct BinaryTree *r;

}*BiTree,BiNode;

BiNode * new()//开辟新的空间

{

return( (BiNode *)malloc(sizeof(BiNode)) );

}

CreateSubTree(BiTree *T,ElemType *all,int i)//创建子结点树

{

if ((all[i]==0)||i>16)

{

*T=NULL;

return OK;

}

*T=new();

if(*T==NULL) return ERROR;

(*T)->data=all[i];

CreateSubTree(&((*T)->l),all,2*i);

CreateSubTree(&((*T)->r),all,2*i+1);

}

CreateBiTree(BiTree *T)//创建树

{

ElemType all[16]={0,1,2,3,0,0,4,5,0,0,0,0,6,0,0,0,};

CreateSubTree(T,all,1);

}

printelem(ElemType d)//输出树

{

printf("%d\n",d);

}

PreOrderTraverse(BiTree T,int (*Visit)(ElemType d))//前序遍历

{

if(T){

if(Visit(T->data))

if(PreOrderTraverse(T->l,Visit))

if(PreOrderTraverse(T->r,Visit)) return OK;

return ERROR;

} else return OK;

}

InOrderTraverse(BiTree T,int (*Visit)(ElemType d))//中序遍历

{

if(T){

if(InOrderTraverse(T->l,Visit))

if(Visit(T->data))

if(InOrderTraverse(T->r,Visit)) return OK;

return ERROR;

}else return OK;

}

Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree *p)//查找结点

{

if(!T) {*p=f;return FALSE;}

else if EQ(key,T->data){ *p=T;return TRUE;}

else if LT(key,T->data) SearchBST(T->l,key,T,p);

else SearchBST(T->r,key,T,p);

}

Status InsertBST(BiTree *T,ElemType e)//插入结点

{

BiTree p;

BiTree s;

if(!SearchBST(*T,e,NULL,&p)){

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

s->data=e;s->l=s->r=NULL;

if(!p) *T=s;

else if (LT(e,p->data)) p->l=s;

else p->r=s;

return TRUE;

}

else return FALSE;

}

void Delete(BiTree *p)//删除结点

{

BiTree q,s;

if(!(*p)->r){

q=(*p);

(*p)=(*p)->l;

free(q);

}

else if(!(*p)->l){

q=(*p);

(*p)=(*p)->r;

free(q);

}

else {

/* q=(*p);

s=(*p)->l;

while(s->r) {q=s; s=s->r;}

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

if(q!=(*p) ) q->r=s->l;

else q->l=s->l;

free(s);

*/

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

while(s->r) s=s->r;

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

free(*p);

(*p)=q;

}

}

Status DeleteBST(BiTree *T,KeyType key)//删除树

{

if (!(*T) )

{return FALSE;}

else{

if ( EQ(key,(*T)->data)) Delete(T);

else if ( LT(key,(*T)->data)) DeleteBST( &((*T)->l), key);

else DeleteBST( &((*T)->r),key);

return TRUE;

}

}

main()

{

BiTree root;

BiTree sroot=NULL;

int i;

int a[10]={45,23,12,3,33, 27,56,90,120,62};

system("cls");

CreateBiTree(&root);

printf("PreOrderTraverse:\n");

PreOrderTraverse(root,printelem);

printf("InOrderTraverse:\n");

InOrderTraverse(root,printelem);

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

InsertBST(&sroot,a[i]);

printf("InOrderTraverse:\n");

InOrderTraverse(sroot,printelem);

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

DeleteBST(&sroot,a[i]);

printf("Now sroot has nodes:\n");

InOrderTraverse(sroot,printelem);

}

小贴士:① 若网友所发内容与教科书相悖,请以教科书为准;② 若网友所发内容与科学常识、官方权威机构相悖,请以后者为准;③ 若网友所发内容不正确或者违背公序良俗,右下举报/纠错。
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
如何用java替换看不见的字符比如零宽空格&#8203;十六进制U+200B
 干货   2023-09-10
网页字号不能单数吗,网页字体大小为什么一般都是偶数
 干货   2023-09-06
java.lang.ArrayIndexOutOfBoundsException: 4096
 干货   2023-09-06
Noto Sans CJK SC字体下载地址
 干货   2023-08-30
window.navigator和navigator的区别是什么?
 干货   2023-08-23
js获取referer、useragent、浏览器语言
 干货   2023-08-23
oscache遇到404时会不会缓存?
 干货   2023-08-23
linux下用rm -rf *删除大量文件太慢怎么解决?
 干货   2023-08-08
刀郎新歌破世界纪录!
 娱乐   2023-08-01
js实现放大缩小页面
 干货   2023-07-31
生成式人工智能服务管理暂行办法
 百态   2023-07-31
英语学习:过去完成时The Past Perfect Tense举例说明
 干货   2023-07-31
Mysql常用sql命令语句整理
 干货   2023-07-30
科学家复活了46000年前的虫子
 探索   2023-07-29
英语学习:过去进行时The Past Continuous Tense举例说明
 干货   2023-07-28
meta name="applicable-device"告知页面适合哪种终端设备:PC端、移动端还是自适应
 干货   2023-07-28
只用css如何实现打字机特效?
 百态   2023-07-15
css怎么实现上下滚动
 干货   2023-06-28
canvas怎么画一个三角形?
 干货   2023-06-28
canvas怎么画一个椭圆形?
 干货   2023-06-28
canvas怎么画一个圆形?
 干货   2023-06-28
canvas怎么画一个正方形?
 干货   2023-06-28
中国河南省郑州市金水区蜘蛛爬虫ip大全
 干货   2023-06-22
javascript简易动态时间代码
 干货   2023-06-20
感谢员工的付出和激励的话怎么说?
 干货   2023-06-18
 
>>返回首页<<
 
 
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有