二叉树排序算法

上传人:s9****2 文档编号:489154703 上传时间:2022-10-20 格式:DOC 页数:15 大小:132KB
返回 下载 相关 举报
二叉树排序算法_第1页
第1页 / 共15页
二叉树排序算法_第2页
第2页 / 共15页
二叉树排序算法_第3页
第3页 / 共15页
二叉树排序算法_第4页
第4页 / 共15页
二叉树排序算法_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《二叉树排序算法》由会员分享,可在线阅读,更多相关《二叉树排序算法(15页珍藏版)》请在金锄头文库上搜索。

1、实验报告课程名称:数据构造实验课程实验四、串的基本操作练习一、实验目的1. 掌握二叉树的存储实现 .掌握二叉树的遍历思想掌握二叉树的常用算法的程序实现二、实验环境V+6.三、实验内容1.输入字符序列,建立二叉树的二叉链表构造。(可以采用先序序列) 2.实现二叉树的先序、中序、后序的递归遍历算法。 实现二叉树的先序、中序、后序的非递归遍历算法。 4求二叉树的高度。 .求二叉树的结点个数。 6.求二叉树的叶子结点的个数。四、实验规定: 分别编写实现上述算法的子函数,并编写一种主函数,在主函数中设计一种简朴的菜单,分别调用上述子函数。五、实验环节和成果1.打开vc,新建文本,命名二叉树算法,编写代码

2、。2编写代码:#cude #clude dfineSTA_II_SIZ 10efineSTAKINCRMNT 1int =0;*-建立堆栈-*ypefstruct BiTNod cha at; truc iTNo *lchld,*rchild; iNod,*BTree;/树类型yedef structqStak BiTNodbse; BiTNe *top; nt sacsze;SqStac;/栈类型voidIitac(qSck *S)/创立二叉树 S-ae(BiTNd*)mlloc(AC_NIT_IZE*seof(BiNod); S-topSase; S-staksze=STACKNIT_SI

3、ZE;voi Puh(SStack *,BiTNode )/进栈 if(Stop - bse =S-aize)/如果栈空间局限性 Sae=(BiNode*)reloc(S-base,(S-stacsize+STCKINCREME)szeof(BiTode)); S-top=-base+S-stackiz; S-akze+=SCINCRMENT; *(-o)=e; Stop+;iNe Pop(SqSack )/出栈 S-top -; rturn*S-p;int StckEmpty(SqStack*S)/判断栈与否非空 if(S-top= S-bae ) retrn 1; ele etrn 0;/

4、*-递归部分-*/iTree Crae(iTee T)/建立二叉树 char h; chtch(); i(h=#) =NULL; else if(!(T=(iTNoe *)mlloc(sizeof(BiNde))) prntf(申请内存空间失败!); -data=ch; T-chil=Cet(T-lchil); -rhildrat(-rchl); returnT;i Sueaf(Tree T)/计算叶子节点 nt m=,m,n; if(T) f((!T-lid)&(!-rchild)) sum+; m=umleaf(T-lchild); sum+m; =Sumaf(T-rchil); sum+

5、n; returnum;*int Suleaf(BTre T)/教师课堂上的计算叶子数的代码,没有问题if(!(T-lhl&T-rchild)return;lsereun(uma(li)Smleaf(Trchild));*int Prder1(BiTre T)/先序递归 i(T) rintf(%c,-d);/根节点+; POrdr1(T-lid); PrOrer_1(Tcld); return; void InOder_(BiTree T)/中序递归 if(T) InOrer_1(lchld); prnf(%c,T-data);/根节点 IO1(-rchid); voidotrder1(BiT

6、re T)/后序递归 if(T) PostOrde_1(-lcild); ostrer_1(T-rhld); printf(c,T-dta);/根节点 int Depth(BiTree T)/计算高度 int de=0,dpl,pr; if(!T)ep=0; else p=(-lcild); depr=Dept(T-cild); ep=1(deldep?dp:pr); retun dep; *-非递归部分-*/vo reder_(BTree T)/先序非递归 SqStack S; iTree pT,q;q=(BTNode*)mlloc(sizeof(BiTNode)); niac(S); i(

7、p) Push(&S,*p); while(!StackEmpty(S) p=q; *pPp(&S);/移到叶子时,出栈,输出出栈元素 pritf(c,p-da); f(p-rchild)/如果有右孩子,访问右孩子,并沿右孩子移位 Pu(&S,*p-cild); if(p-lcd)/如果没有右孩子,访问左孩子,并移到左孩子 Push(&,*p-child);vodnOde_2(iTee )/中序非递归 SqStakS; BiTreep,q;p=T; InitStack(S);q=(BiNod )malo(of(BiNode); whie(|!tackEmpt()) if() Push(S,p)

8、; =p-lcild; else =q; *p=Pop(&S); prin(%c,p-data); p=-rchi;vid PosOrer_2(BiTree T)/后序非递归 int mk100;/标示nt =0;ntop=-;下标SqacS; BiTrep=T,q; InitStck(&S);q(BiTNode *)lloc(szeo(BNode));if(&(plchil|-il)) d wh(p-cld|-rchid)&mrktop+1!=)/循环直到让向左滑到叶子节点 top+; Push(,*p);/每循环一次,目前结点入栈 rktop=1;/结点第一次入栈时,标志为1 i(lchid) p=p-hil;/找最左子树 elsef(-chi)p=-rcld; (p) ptf(c,-daa); p=; *p=Pp(S); t-;出栈,下标归位 if(!p-child|!p-lchild)/避免浮现不必要的再次入栈 mrktp+1=2; (arop+=1&chl)/若结点是第一次出栈,则再入栈 o+; u(S,p); rkto=2;/结点第二次入栈时,标志为2 p=-rhild;/访问右子树 arkop+1=; if(ma0=2&t=0)/当栈剩余最后一种结点的时候,把下标初始化。 int i; +; o(i=;10;i+) marki0;

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号