2025年二叉树实验操作技巧与深度解析指南.doc
实??验??报告
課程名称算法与数据构造
专????业
学号
姓名?
试验曰期?11月17曰
算法与数据构造试验汇报
二叉树的应用
一、试验目的
1.理解二叉树的构造特点及有关概念,掌握二叉树建立的基本算法?
2.理解二叉树遍历的概念,掌握遍历二叉的算法
3.深入掌握树的构造及非线性特点,递归特点和动态性。?
二、试验内容
二叉树的实現和运算
三、试验规定?
1.用C++/C完毕算法设计和程序设计并上机调试通过。
2.撰写试验汇报,提供试验成果和数据。?
3.分析算法,并简要給出算法设计小結和心得。?
四、算法环节
顾客以三元组形式输入二叉树的結点元素及其位置关系,建立二叉树,并打印输出该二叉树。
顾客输入选择結点,程序调用BiTNode*FindNode(chartag,BiTNode*node)函数,返回子树的根結点,然后调用BiTreeDepth(BiTreeT)函数,求出子树的深度,并输出该值。
3.顾客可以选择与否继续执行程序,若继续,则输入1,否则输入0,結束程序。
五、主程序代码:
intmain(void)
{
BiTreeT;
TElemTypee1;
charnode;//node為顾客选择输入的結点//
intb,choose;//b為以选定結点為子树的深度,choose為实現多次选择输入的标志//
BiTNode*a;//a為选定結点為子树的根結点//
choose=1;//多次选择的标志,当choose為1時运行程序,為0時結束程序//InitBiTree(T);
printf(构造空二叉树后,树空否?%d(1:是0:否),树的深度=%d\n,BiTreeEmpty(T),BiTreeDepth(T));
e1=Root(T);
if(e1!=Nil)
#ifdefCHAR
printf(二叉树的根為:%c\n,e1);
#endif
#ifdefINT
printf(二叉树的根為:%d\n,e1);
#endif
else
printf(树空,无根\n);//三元组构建二叉树stringx;
printf(输入格式阐明:三元组(P,C,L/R)方式输入,P:parent,C:child,L/R:CisPsleftchild/rightchild,输入end結束输入\n);
printf(eg.theroot:input^AL,itsleftchildisB:inputABL,itsrightchildisC:inputACR!\n);
GetUserWord(x);
while(x!=end)
{
AddNode(T,x[0],x[1],x[2]);
GetUserWord(x);
}//输出树PrintTreeLevel(T);
//以三元组形式输入任意二叉树(以大写字母表达結点),求以任意一选定結点為子树的深度。
while(choose)//实現多次选择输入//
{
printf(Pleaseselectanode:);
fflush(stdin);
scanf(%c,node);
a=FindNode(node,T);//a為生成子树的根//
b=BiTreeDepth(a);
printf(theDepthofBiTreeis:%d\n,b);
printf(\nifyouwanttocointuechoose1,elsechoose0:);
fflush(stdin);
scanf(%d,choose);
}
DestroyBiTree(T);
returnEXIT_SUCCESS;
}
六、心得体会?
树是常用的数据构造。通过试验加深了我对树的遍历的认识,巩固了书本中所学的有关树的基本算法。按规定完毕了试验内容。?
通过试验,有如下几点收获和体会:?
1、通过试验还提高了一点改錯能力,对于某些常見问題加深了印象。?
2、编程需要有耐心,尤其实在单步调试的時候,更是馬虎不得,有時候关键就是那么一步,錯过了就得从头来过了。编程也需要勇气,要勇于发現自已的錯误,也要勇于推翻自已之前的思绪,要坚信“没有最佳,只有更好”。编程,最佳是一鼓作气,得每天“摸摸”它,時時想着它,要是过一阵再去碰它那就得先去读懂自已的程序了,一切的一切几乎都得从头开始。编程需要细心,有時一种不注意小錯误就能引出大问題。编程也需要规范,不仅為了他人能看得懂程序,也為了以便自已后来程序的更改与深入