数据结构二叉树的算法Word下载.docx

上传人:b****5 文档编号:18734554 上传时间:2022-12-31 格式:DOCX 页数:11 大小:94.91KB
下载 相关 举报
数据结构二叉树的算法Word下载.docx_第1页
第1页 / 共11页
数据结构二叉树的算法Word下载.docx_第2页
第2页 / 共11页
数据结构二叉树的算法Word下载.docx_第3页
第3页 / 共11页
数据结构二叉树的算法Word下载.docx_第4页
第4页 / 共11页
数据结构二叉树的算法Word下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构二叉树的算法Word下载.docx

《数据结构二叉树的算法Word下载.docx》由会员分享,可在线阅读,更多相关《数据结构二叉树的算法Word下载.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构二叉树的算法Word下载.docx

5.求二叉树中的结点数;

6.设计一个算法,求二叉树指定的结点x的层数,求先序遍历序列中第k个结点的左孩子;

三.课程设计内容解答:

1.二叉树的二叉链式存储结构的结点结构体定义

typedefstructnode

{TElemTypedata;

structnode*left;

structnode*right;

structnode*parent;

}BiTNode,*BiTree;

2.写二叉树的先序,中序,后序遍历算法

先序遍历算法

voidProrder1(BiTNode*bt,void(*visit)(TElemType))

{if(bt!

=NULL)

{visit(bt->

data);

Prorder1(bt->

left,visit);

right,visit);

}}

中序遍历算法

voidProrder2(BiTNode*bt,void(*visit)(TElemType))/

{BiTNode*p,*stack[MAS];

inttop;

top=0;

p=bt;

while(top!

=0||p!

{while(p!

{stack[top]=p;

top++;

p=p->

left;

}

if(top!

=0)

{p=stack[top-1];

top--;

visit(p->

right;

}

后序遍历算法

voidProrder3(BiTNode*bt,void(*visit)(TElemType))/

stack[top]=bt;

while(top>

0)

while(p!

{visit(p->

stack[top]=p->

等一系列的代码说明就不再报告中啰说还占用报告篇幅

4.程序结果截图

五.课程设计小结

1.指出二叉树的顺序存储和链式存储的优缺点:

(顺序存储可能会浪费空间,但是读取某个指定节点的时候效率比较高)

2.将你测试使用的二叉树,如果使用顺序存储,请画出存储结构

3.课程设计的时间好短啊,好难的课程设计啊!

附件:

#include<

stdlib.h>

stdio.h>

#defineMAX50

#defineMAS20

#defineCHAR1

#ifCHAR

typedefcharTElemType;

TElemTypeNil='

'

;

#defineform"

%c"

#else

typedefintTElemType;

TElemTypeNil=0;

%d"

#endif

typedefstructnode

BiTNode*InitBiTree(BiTNode*bt)

{

bt=NULL;

returnbt;

BiTNode*CreateBiTree(BiTNode*bt)

{TElemTypech;

scanf(form,&

ch);

if(ch==Nil)bt=NULL;

else

{bt=(BiTNode*)malloc(sizeof(BiTNode));

if(!

bt)exit(0);

bt->

data=ch;

parent=NULL;

left=CreateBiTree(bt->

left);

if(bt->

left)bt->

left->

parent=bt;

right=CreateBiTree(bt->

right);

right)bt->

right->

voidPrintTree(BiTNode*bt,inti)

{if(bt!

{PrintTree(bt->

right,i+5);

#ifCHAR

data!

=Nil)

printf("

%*c\n"

i,bt->

#else

%*d\n"

#endif

PrintTree(bt->

left,i+5);

i=i-5;

voidProrder1(BiTNode*bt,void(*visit)(TElemType))/*先序遍历*/

voidProrder2(BiTNode*bt,void(*visit)(TElemType))/*中序遍历*/

voidProrder3(BiTNode*bt,void(*visit)(TElemType))/*后序遍历*/

voidvisit(TElemTypee)

{printf(form"

"

e);

intSumLefts(BiTNode*bt,intsum)

if(bt!

{

if(bt->

left==NULL&

&

right==NULL)

%4c"

bt->

sum++;

sum=SumLefts(bt->

left,sum);

right,sum);

return(sum);

intSumTree(BiTNode*bt)

{staticintsum=0;

if(bt!

{printf("

sum=SumTree(bt->

BiTNode*Findchar(BiTNode*bt,charch)/*二叉树查找结点*/

{BiTNode*p;

/*利用函数名返回结果*/

{if(bt->

data==ch)p=bt;

p=Findchar(bt->

left,ch);

right,ch);

if(p!

=NULL)return(p);

elsereturn(NULL);

voidmain()

{intj,i,a,sum=0;

BiTreebt;

bt=InitBiTree(bt);

请先序输入二叉树(如:

ab三个空格表示a为根结点,b为左子树的二叉树)\n"

);

12000表示1为根结点,2为左子树的二叉树)\n"

bt=CreateBiTree(bt);

输入建立的二叉树!

!

\n"

PrintTree(bt,5);

do{

------------------------------------------------------------"

\n主菜单"

\n1二叉树先序遍历"

\n2二叉树后序遍历"

\n3二叉树中序遍历"

\n4二叉树叶子结点数"

\n5二叉树结点数"

\n6二叉树查找x结点"

\n0退出"

\n----------------------------------------------------------"

输入你要选择的数据:

"

scanf("

&

i);

switch(i)

{case1:

先序遍历结果为:

Prorder1(bt,visit);

break;

case2:

后序遍历结果为:

Prorder2(bt,visit);

case3:

中序遍历结果为:

Prorder3(bt,visit);

case4:

j=SumLefts(bt,sum);

树的叶子结点数为%d:

j);

case5:

j=SumTree(bt);

树的结点数为%d:

case6:

输入要查找的结点字符x:

a);

%*c"

//j=Findchar(bt,a);

要查找的结点的指针为%d:

case0:

exit(0);

printf("

//getch();

}while(i>

0||i<

8);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1