个程序二叉树实验报告.pdfVIP

  • 0
  • 0
  • 约1.9千字
  • 约 2页
  • 2025-06-05 发布于北京
  • 举报

实验报告

题目:[问题描述]若用大写字母标识树的结点,则可用带标号的广以表形式表示一棵树,

试写一递归算法,由定义广义表表示法的字符序列,构造树的孩子链表。

一需求分析

1.树的结点全使用大写字母,以广义表表示树。

2.演示程序以用户和计算机的方式执行,即在计算机终端上显示“提示信息”

,由用户在键盘上输入演示程序中规定的运算命令。

3.程序包含令

1)由广义表形式的输入建立孩子链表2)以树的形式输出3)结束

二概要设计

算法:

charc;

intpos=0;//pos是全局变量,指示已经分配到了哪个结点

StatusCreateCTree_GList(CTreeT,inti)//由广义表形式的输入建立孩子链表

{

c=getchar();

T.nodes[pos].data=c;

i=pos++;//i是局部变量,指示当前正在处理的子树根

if((c=getchar())()//非叶结点

{

CreateCTree_GList();

p=(CTBox*)malloc(sizeof(CTBox));

T.nodes[i].firstchild=p;

p-child=pos;//建立孩子链的头

for(;c,;p=p-next)//建立孩子链

{

CreateCTree_GList(T,j);//用j返回分配得到的子树根位置

p-child=j;

p-next=(CTBox*)malloc(sizeof(CTBox));

}

p-next=NULL;

if((c=getchar())!=))returnERROR;//括号不配对

}//if

elseT.nodes[i].firtchildNULL;//叶子结点

returnOK;

}//CreateBiTree_GList

分析:该算法中,pos变量起着分配结点在表中的位置的作用,是按先序序列从上向下分配,

因此树根T.r一定等于0,而最终的pos值就是结点数T.n.

三详细设计

#includestdio.h

#defineMax10

structnodes

{chardata;

intlc,rc;

}

A[Max]={{0,0,0},{A,2,3},{B,4,5},{C,0,6},{D,0,0},{E,0,7},{F,8,9},{G,

0,0},{H,0,0},{I,0,0}};

voidinorder(introot)

{

if(A[root].lc!=0)inorder(A[root].lc);

printf(%s,A[root].data);

if(A[root].rc!=0)

inorder(A[root].rc);

}

voidmain()

{introot=1;

inorder(root);

printf(\n);

}

四调试分析

1.由于对算法的推敲不足,导致算法低效。

2.刚开始时曾忽略了一些变量参数的标识符。

3.本程序的划分比较合理。

五用户使用说明

本程序的运行环境为DOS操作系统,执行文件:A15-4.exe.

六测试结果

DBEGACHFI

七附录

源文件文件名:

A15-1.c//主程序

文档评论(0)

1亿VIP精品文档

相关文档