二叉树的各种算法(干货分享)_第1页
二叉树的各种算法(干货分享)_第2页
二叉树的各种算法(干货分享)_第3页
二叉树的各种算法(干货分享)_第4页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

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

文档简介

1、2020年二叉树的各种算法(课件)二叉树的各种算法txt男人的承诺就像80岁老太太的牙齿,很少有真的。你嗜烟成性的时候,只有三种人会高兴,医生你的仇人和卖香烟的。/*用函数实现如下二叉排序树算法:() 插入新结点(2)前序、中序、后序遍历二叉树 (3) 中序遍历的非递归算法(4) 层次遍历二叉树(5) 在二叉树中查找给定关键字(函数返回值为成功1,失败0) (6)交换各结点的左右子树 (7) 求二叉树的深度 (8) 叶子结点数n第一行:准备建树的结点个数n 第二行:输入n个整数,用空格分隔 第三行:输入待查找的关键字 第四行:输入待查找的关键字 第五行:输入待插入的关键字Outpu第一行:二叉

2、树的先序遍历序列 第二行:二叉树的中序遍历序列 第三行:二叉树的后序遍历序列第四行:查找结果第五行:查找结果第六行第八行:插入新结点后的二叉树的先、中、序遍历序列 第九行:插入新结点后的二叉树的中序遍历序列(非递归算法) 第十行:插入新结点后的二叉树的层次遍历序列 第十一行第十三行:第一次交换各结点的左右子树后的先、中、后序遍历序列 第十四行第十六行:第二次交换各结点的左右子树后的先、中、后序遍历序列 第十七行:二叉树的深度 第十八行:叶子结点数/incle stdioh#clude malch”ein TRUE defneFALSE 0defin OK 1#defie ERO ene INF

3、ESIBLE -1#dine ERFLW 2typede in Statu;ypedefntKeyye;efneSTC_INITSZE 10 / 存储空间初始分配量#efn STACKINCREMENT 10 / 存储空间分配增量efie MAXQIZ 10tpef int ElemTe;typede stuctBiTNode Elmye ata; stut BTNd lchld,rchil;/左右孩子指针 BiTNde,BTee;tatus SearhBS(BieT,KeyType ke,BiTre f,BiTre &)if(!T)pf;reur ALSE;els i(keyT-dat)p=

4、;return TRE;if(eyTdata)retrn SarchST(-chil,key,p);else etur(erchST(rhild,key,T,p);Stas nserB(BiTree T,Elemy e)BiTees,p; f(!SeachBST(,e,NUL,p))s=(Bire)mloc(szeof(Bid));sdatae;s-lchil=srchl=NLL;if(!)s;else f(ell=s;el p-rchild=s;tun TRE; elseeturnFALSE;Status PrintElemen(lepe e ) / 输出元素的值pintf(d ”, );

5、rturn K;/ntEentStau PreOrderTraves( BiT T, Stat(Vist)(EeTye) ) / 前序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 /补全代码,可用多个语句 i()i(Viit(Tata))if(derTraverse(T-lhild,Vi)i(PreOrdrTaverse(Trhid,isit)reurnOK;return ERROR;lereturnK; / PreOderTaersStatu InrdeTraerse(BTe T, tatu(Visit)(ElTpe) ) /中序遍历二叉树T的递归算法,对每个数据元素调用函数V

6、it。 /补全代码,可用多个语句(T)if(nrderTraers(Tlild,Visi))i(Visi(T-aa))if(nOrderTrarse(T-chil,Vsi))retuOK;retur ERRR; lse etr OK; / IOdrTraversSttu PostOrderTravrs( BTre T, Statu(sit)(lemyp) ) / 后序遍历二叉树的递归算法,对每个数据元素调用函数Vsit. /补全代码,可用多个语句if(T) f(PostOrdTrverse(T-lhil,Viit))if(PosOrerTravrse(Trcld,Vsit)i(Visit(-d

7、aa))return O;etu EROR;else turn OK; /PostOrdeTraverseSttus utot(BiTree ) PeOerTrvese(T,Pntmn);pitf(n);InrderTravrse(, PrintEent); pit();PstOrerTaese(T,PinElemen); rit(”n); rurnK;/非递归算法struct SqSc BiTre se; / 在栈构造之前和销毁之后,bs的值为NLL iTree top; 栈顶指针 int staksie; / 当前已分配的存储空间,以元素为单位;/ 顺序栈Status niStk(SqSt

8、ack &) bse=(iTre )malloc(T_I_SZsizef(BiTre)); if(!.bs)reunR; op=S.bs; sackszSAI_SIZE; eturn OK;ttuPush(Sqtak,Bie e) f(Sop-Sbase)=Ssacke) S。ase=(BiTree)realloc(.base,(S。tacksze+SACINCEENT)*sieof(BTree); if(!S。base)return RRO; S.topbase+Ssacksize; Sstcks+=STACNENT; *S.top+=; etr OK;tatu Po(SqStck &S,r

9、e &e) (Sto=S。bas)rtur ERROR;e*-。top;return OK;Saus SackEmpty(SStac ) /若栈S为空栈,则返回TRUE,否则返回FALSE if(。topS。ae=0)return TRUE; se return FALSE; Stat InrerTaverse(BiTre T,Sts(*sit)(ElemType e),qStac S)BiTr p;Intack(S);p=T;we(!tEmpty(S)if(p)Push(S,);=plhild;ele Pop(S,p);if(!Visit(dt))retr ERROR;p=p-rhil;re

10、urn K;/层次遍历tpdefstuct BiTre bse;/ 初始化的动态分配存储空间 it front; / 头指针,若队列不空,指向队列头元素 int er;/ 尾指针,若队列不空,指向队列尾元素的下一个位置SQueue;Satus niQe(uue ) base(Bire*)malloc(MAQSZE*sizof(BiTr)); if(!Qbase)returnERR;Q.frot=Q.rea=; eturn OK;int QueueLengh(qee Q) / 返回Q的元素个数/ 请补全代码 return(Q。ar。front+MAXQSIZ)%MXSE;Sat EnQue(Qu

11、eue&Q,Bie) / 插入元素为Q的新的队尾元素/ 请补全代码 if((.rar+)AQSIE=.frn)return OR; Q。bseQ.rear=e; .rear=(Qrea+1)XQSZ; retu K;SatusDeQe(SQuue Q,BiTre e) / 若队列不空, 则删除的队头元素, 用e返回其值, 并返回O; 否则返回EROR/ 请补全代码 if(Q.frt=Q。rear)returnERROR; e=Q。baeQ.fron; Qfront(Qfrnt+1)%MAXQIZE; rturn OK;SttuLeelTaverse(iTree T,SqQueueQ)层次遍历二

12、叉树IiQuue(Q);BTre p;=T;i(T)nQueue(,T);/pint(”%d,ueueLenh(Q);while(uueLgth(Q)!0)DeQue(Q,p); /根结点出队printf(%d”,pata); /输出数据if(p-lhi)nue(Q,plcl); /左孩子进队f(p-child)EnQue(Q,prchid); /右孩子进队return OK; oi Chang(BirT)BiTo *;f(T)p=lc;Tlcd=Trchild;rchd=p;Chage(Tlcil);hane(T-rcil); / etur OK;n BTeeDeph(BTee T) /求由

13、BT指针指向的一棵二叉树的深度 /intdep1,dep2; (!=NULL) /计算左子树的深度 in ep1=BreeDeh(-chld); /计算右子树的深度 int ep2BTreeDepth(Trhid); /返回树的深度 i(de1dep2) retun de1+; els returdep+1; els etrn 0; /叶子结点数Stat yezi(Bree T,SqQuue Q)in i;ntueue(Q);BiTre ;=T;if()nQueue(Q,T);/pnt(”d”,QueLength(Q);hle(Quueenth(Q)!=)DeQueue(Q,p);i(lchild)Enueu(,plchl);if(p-rchild)Enue(,prchild);if(!-lchl&!p-rchild) +; retun ;nmai() /主函数 SqSack S;SQuu Q,Q3;BiTre T=ULL,f,p;int i,e,b,c;an(%d,n);for(i=0;i;i+)scanf(”%d,&e); IsrtBST(,e);scanf(”%d,&a);snf(”%d”,b);cnf(,c);Putt();pin(n”,SerchBS(T,a,,);printf(%dn”,SerhBST(T,

温馨提示

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

评论

0/150

提交评论