C语言C++实现二叉树构造与查找删除节点.doc_第1页
C语言C++实现二叉树构造与查找删除节点.doc_第2页
C语言C++实现二叉树构造与查找删除节点.doc_第3页
C语言C++实现二叉树构造与查找删除节点.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

# include # include # include typedef int Etype;typedef struct BiTNode Etype data; struct BiTNode *lch,*rch; BiTNode,*pointer;BiTNode *creat_bt1();BiTNode *creat_bt2();void inorder(BiTNode *p);void numb(BiTNode *p);BiTNode *t; int n,n0,n1,n2;pointer point=NULL;int searchbst(pointer p,Etype key,pointer parent,pointer &q);int insertbst(pointer &p,Etype key);void deletedata(pointer &p);int deletebst(pointer &p,Etype key);void main() system (color 6e );char ch; int k;int cp,num,sk; do printf(nnn); printf(nn 1. 建立二叉排序树并中序遍历); printf(nn 2. 二叉链表建立二叉树); printf(nn 3. 顺序数组建立二叉树); printf(nn 4. 计算树中结点个数); printf(nn 5. 中序遍历二叉树); printf(nn 6. 二叉排序树查询删除节点); printf(nn 7. 结束程序运行); printf(n=); printf(n 请输入您的选择 (1,2,3,4,5,6,7); scanf(%d,&k); switch(k) case 1:printf(请输入结点的个数:); scanf(%d,&num); for(cp=0;cp=1 & kdata)q=p;return 1;else if(keydata)return searchbst(p-lch,key,p,q);else return searchbst(p-rch,key,p,q);int insertbst(pointer &p,Etype key)pointer q,s;if(!searchbst(p,key,NULL,q) s=(pointer)malloc(sizeof(BiTNode); s-data=key; s-lch=s-rch=NULL; if(!q)p=s; else if(s-datadata)q-lch=s; else q-rch=s; printf(插入成功!n); return 1;else printf(插入失败!n);return 0;int deletebst(pointer &p,Etype key)if(!p)return 0;else if(p-data=key)deletedata(p);return 1;else if(keydata) return deletebst(p-lch,key);else return deletebst(p-rch,key);void deletedata(pointer &p)pointer q,s; if(!p-rch) q=p;p=p-lch;free(q); printf(查找成功,已删除该结点!n); return;else if(!p-lch) q=p;p=p-rch;free(q); printf(查找成功,已删除该结点!n); return;else q=p;s=p-lch; while(s-rch)q=s;s=s-rch; p-data=s-data; if(q!=p)q-rch=s-lch; else q-lch=s-lch; delete s; printf(查找成功,已删除该结点!n); return;printf(无此结点!n);BiTNode *creat_bt1()/利用数组建立 BiTNode *t,*p,*v20; int i,j; Etype e; printf(n 输入结点的序号i,结点的数据?); scanf(%d,%d,&i,&e); while(i!=0 & e!=0) p=(BiTNode *)malloc(sizeof(BiTNode); p-data=e; p-lch=NULL; p-rch=NULL; vi=p; if (i=1) t=p; else j=i/2; if(i%2=0) vj-lch=p; else vj-rch=p ; printf(n i,data=?); scanf(%d,%d,&i,&e); return(t); /模仿线序遍历递归建立二叉树 BiTNode *creat_bt2() BiTNode *t; int e; printf(n data=); scanf(%d,&e); if(e=0) t=NULL; else t=(BiTNode *)malloc(sizeof(BiTNode); t-data=e; printf(输入其左孩子 无左孩子输入0); t-lch=creat_bt2(); printf(输入最下层未知左孩子结点的左孩子 无左孩子弟输入0); t-rch=creat_bt2(); return(t); void inorder(BiTNode *p) if (p) inorder(p-lch); printf( %3d,p-data); inorder(p-rch); /利用中序递归遍历二叉树的方法,计算树中结点个数 void numb(BiTNode *p) if (p) numb(p-lch); printf(%3d,p-data); n+; if(p-lch=NULL &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论