1、二叉树求表达式的值(一)实验目的本实验以二叉树的创建与访问算法设计作为实验容,掌握树型结构的实现方法,培养解决负责问题的能力。(二)实验容1、 编写生成二叉树的函数,二叉树的元素从键盘输入;2、 编写在二叉树中输入表达方式的函数;3、 编写在二叉树中实现表达方式的值的函数;4、 编写遍历并输出二叉树的函数。(三) 实验要求1、 掌握树型结构的机器表示;2、 掌握树型结构之上的算法设计与实现;3、 列表对比分析两种数据结构的相应操作的时间复杂度、空间复杂度,阐明产生差异的原因。(四) 实验设计思路实验采用递归创建二叉树的表达,并实现了后序遍历二叉数表达式,既逆波兰表达式的输出,编写函数计算表达式
2、的值,并输出。对实验题目进行细分,逐一实现函数预期的功能,如下图,先序输入创建二叉树表达式:+*-99#89#2#/66#3#输出结果:422实验报告(一)部分算法流程图1先序创建二叉树表达式(五)程序清单#i n c l u d e#i n c l u d e#in cludevstri ng. h #d ef i ne len 20#d efi n e NULL 0 st ru ct treechar d at a l e n ;tree * l ch i l d ,* r ch i l d ;void createtree(tree* & tre)/ / 创建二叉树char ch l e
3、 n ;scanf (” %s , ch);g et ch ar ();if(strcmp(ch,#) = = 0)t r e= NULL;elset r e= (tree *)malloc(sizeof(tree); st rcpy (tre- d at a,ch );cr eatet ree(t re- l ch i l d );createtree(tre - r ch i l d); void in putt ree(tree *t re)/ 输出 二叉树 if(tre!= NULL)prin t f ( %s, t r e - d at a);N U LL)i f (t r e- l
4、child!=NULL|tre- r ch i l d !pri ntf( ();in puttree(tre - Ichild);i f (t r e - rch i Id ! = N ULL)pri n t f (,);in p u tt ree(t re- rchi Id);pri ntf(); void t r av e r se t r e e(t re e *t re)/ 后续遍历 if(tre!= N ULL)t raver set ree(t re- l ch i l d );t raver set ree(t re- r ch i l d );p ri n tf ( %s ,
5、t re- d at a); void in ordertravers(tree*tre)/ / 中 续遍历if(tre!= N ULL)t raver set ree(t re- Ichild);p ri n tf ( %s ,t re- d at a);t raver set ree(t re- r ch i l d ); double so l ut io n(tree * t r e)/ / 二叉树表达式求值if(tre- l ch ild = = N ULL & tre- rchild = = NULL & tre-dataO = O & & t re- d at a 0 d at
6、a);e l sesw i tch (t re- d at a0)rch ild);rc h ild);- r c h i l d );case*:retur n so l u t i on( tre - l ch i l d )* so l u t i on( t r e - case - :r et u r n so l u t i on( tre- l ch i l d )- so l u t i on( t r e - case + : re t u r n so l u t i on( tre - l c h i l d) + sol u t i on( t re case/: re
7、t u rn soluti on( tre - lchild)/soluti on( t re - rchild);i n t m a i n ()tree * t re ;double sum;i n t ch; d ori ntf ( 选择下面功能 n );ri ntf (1.先序创建二叉数表达式n ri ntf(2.后序遍利二叉数表达式n ri ntf(3.求二叉数表达式的数值n ri ntf(4.中序遍利二叉数表达式n ri ntf(5.退出二叉数nri ntf( n)P);P);P);P);P);PPsca nf (%d,&ch);sw i tch(ch)case 1 :p r i
8、n t f (” 输入创建的二叉树: n );g etchar();createtree(tre) ;in puttree(tre);p r i n t f ( n ) ;b r e a k ;case 2 :p r i n t f (后序遍历的二叉树:n );t raver set ree(t re) ;p r in t f ( n ”);break;case 3 :su m = so l u t i on( t r e); p r in t f (二叉树 表达式 的值为=%f n ,sum);break;case 4 :p r i n t f (中序遍历的二叉树:n);in ordertr
9、avers(tre);pri ntf(” n );break; case 5 : break; w h i l e (ch ! = 5);retu rn 0;(六)实验结果 选择下面功能 1.先 序创建二叉数 表达式2.后序遍利二叉数表达式3.求二叉数表达式的数值4.中序遍利二叉数表达式5.退出二叉数输入创建的二叉树:+8 9#2#/6 6#3# + (*(- (99,8 9),2),/(6 6,3 ) 选择下面功能1.先序创建二叉数表达式2.后序遍利二叉数表达式3.求-二二叉数表达式的数值4.中序遍利二叉数表达式5.退岀:二叉数2后序遍历的二叉树:9989-2*663/+选择下面功能1.先序
10、创建二叉数表达式2.后序遍利二叉数表达式3.求二二叉数表达式的数值4.中序遍利二叉数表达式5.退岀:二叉数4中序遍历的二叉树:9989-2*+663/选择下面功能1.先 序创建 二叉数 表达式2.后序遍利二叉数表达式3.求二叉数表达式的数值4.中序遍利二叉数表达式5.退出二叉数3二叉树表达式的值为= 4 2. 000000 选择下面功能 1.先序创建二叉数表达式2.后序遍利二叉数表达式3.求二叉数表达式的数值4.中序遍利二叉数表达式5.退出二叉数5请按任意键继续(7)实验遇到的问题二叉树的递归创建只能先序创建吗?若采用中序或后序创建, 必须先输入左子树,我们所定义二叉树往电脑输入时,必须有终止条件,比如if(strcmp(ch,#)=0)tre=NULL;所以,一颗二叉树中序或后序建立时,必先输入左子树,而左子树是终止条件,所以,无法建立 一颗二叉树。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1