二叉树求表达式的值.docx

上传人:b****6 文档编号:5838871 上传时间:2023-01-01 格式:DOCX 页数:8 大小:20.61KB
下载 相关 举报
二叉树求表达式的值.docx_第1页
第1页 / 共8页
二叉树求表达式的值.docx_第2页
第2页 / 共8页
二叉树求表达式的值.docx_第3页
第3页 / 共8页
二叉树求表达式的值.docx_第4页
第4页 / 共8页
二叉树求表达式的值.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

二叉树求表达式的值.docx

《二叉树求表达式的值.docx》由会员分享,可在线阅读,更多相关《二叉树求表达式的值.docx(8页珍藏版)》请在冰豆网上搜索。

二叉树求表达式的值.docx

二叉树求表达式的值

(一)实验目的

本实验以二叉树的创建与访问算法设计作为实验容,掌握树型结构的实现方法,培养

解决负责问题的能力。

(二)实验容

1、编写生成二叉树的函数,二叉树的元素从键盘输入;

2、编写在二叉树中输入表达方式的函数;

3、编写在二叉树中实现表达方式的值的函数;

4、编写遍历并输出二叉树的函数。

(三)实验要求

1、掌握树型结构的机器表示;

2、掌握树型结构之上的算法设计与实现;

3、列表对比分析两种数据结构的相应操作的时间复杂度、空间复杂度,阐明产生差异

的原因。

(四)实验设计思路

实验采用递归创建二叉树的表达,并实现了后序遍历二叉数表达式,既逆波兰表达式的

输出,编写函数计算表达式的值,并输出。

对实验题目进行细分,逐一实现函数预期的功能,如

下图,先序输入创建二叉树表达式:

+*-99##89##2##/66##3##

 

输出结果:

42

2

 

实验报告

(一)部分算法流程图

1先序创建二叉树表达式

(五)程序清单

#include

#include

#includevstring.h>

#definelen20

#defineNULL0structtree

{

chardata[len];

tree*lchild,*rchild;

};

voidcreatetree(tree*&tre)//创建二叉树

{

charch[len];

scanf(”%s",ch);

getchar();

if(strcmp(ch,"#")==0)tre=NULL;

else

{

tre=(tree*)malloc(sizeof(tree));strcpy(tre->data,ch);

createtree(tre->lchild);

createtree(tre->rchild);

}

}voidinputtree(tree*tre)//输出二叉树{

if(tre!

=NULL)

{

printf("%s",tre->data);

NULL)

if(tre->lchild!

=NULL||tre->rchild!

printf("(");

inputtree(tre->Ichild);

if(tre->rchiId!

=NULL)printf(",");

inputtree(tre->rchiId);

printf(")");

}

}

}voidtraversetree(tree*tre)//后续遍历{

if(tre!

=NULL)

{

traversetree(tre->lchild);

traversetree(tre->rchild);

printf("%s",tre->data);

}

}voidinordertravers(tree*tre)//中续遍历

if(tre!

=NULL)

traversetree(tre->Ichild);

printf("%s",tre->data);

traversetree(tre->rchild);

}

}doublesolution(tree*tre)//二叉树表达式求值

{

if(tre->lchild==NULL&&tre->rchild==NULL&&tre->data[O]>='O'&&tre->data[0]<='9')

returnatof(tre->data);

else

{

switch(tre->data[0])

>rchild);

>rchild);

->rchild);

{

case'*':

returnsolution(tre->lchild)*solution(tre-case'-':

returnsolution(tre->lchild)-solution(tre-case'+':

returnsolution(tre->lchild)+solution(trecase'/':

returnsolution(tre->lchild)/solution(tre->rchild);

intmain()

{

tree*tre;

doublesum;

intch;do

rintf("

选择下面功能

…n");

rintf("

1.先序创建二叉数表达式

n"

rintf("

2.后序遍利二叉数表达式

n"

rintf("

3.求二叉数表达式的数值

n"

rintf("

4.中序遍利二叉数表达式

n"

rintf("

5.退出二叉数

n"

rintf("

…n")

P

);

P

);

P

);

P

);

P

);

P

P

scanf("%d",&ch);

switch(ch)

case1:

printf(”输入创建的二叉树:

n");getchar();

createtree(tre);inputtree(tre);

printf("n");break;

case2:

printf("后序遍历的二叉树:

n");

traversetree(tre);printf("n”);break;

case3:

sum=solution(tre);printf("二叉树表达式的值为=%fn",sum);break;

case4:

printf("中序遍历的二叉树:

n");

inordertravers(tre);printf(”n");break;case5:

break;

}

}while(ch!

=5);

return0;

}

(六)实验结果

选择下面功能

1.先序创建二叉数表达式

2.后序遍利二叉数表达式

3.求二叉数表达式的数值

4.中序遍利二叉数表达式

5.退出二叉数

输入创建的二叉树:

+

89

#

#

2

#

#

/

66

#

#

3

#

#+(*(-(99,89),2),/(66,3))

选择下面功能•

1.

建二叉

2.

利二叉

3.

-二二

数表达

4.

利二叉

5.退

岀:

二叉数

2

后序遍历的二叉树:

9989-2*663/+

选择下面功能

1.

建二叉

2.

利二叉

3.

■二二

数表达

4.

利二叉

5.退

岀:

二叉数

4

中序遍历的二叉树:

9989-2*+663/

选择下面功能

1.先序创建二叉数表达式

2.后序遍利二叉数表达式

3.求二叉数表达式的数值

4.中序遍利二叉数表达式

5.退出二叉数

3

二叉树表达式的值为=42.000000

选择下面功能

1.先序创建二叉数表达式

2.后序遍利二叉数表达式

3.求二叉数表达式的数值

4.中序遍利二叉数表达式

5.退出二叉数

5

请按任意键继续

(7)实验遇到的问题

二叉树的递归创建只能先序创建吗?

若采用中序或后序创建,必须先输入左子树,我

们所定义二叉树往电脑输入时,必须有终止条件,比如if(strcmp(ch,"#")==0)tre=NULL;所以,

一颗二叉树中序或后序建立时,必先输入左子树,而左子树是终止条件,所以,无法建立一颗二叉树。

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

当前位置:首页 > 经管营销

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

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