当前位置:首页 >> 工学 >>

二叉树表达式


#include <stdio.h> #include <stdlib.h> #include <conio.h> #include <string.h> typedef struct node { char data; float f; struct node *Lchild; struct node *Rchild; }BTNode; typedef struct { char data[100]; int top; }stack; char s[100]; int link; stack c; BTNode *Q[100]; int top; void LeafNodes(BTNode *root) { if(root) { if(root->Lchild==NULL&&root->Rchild==NULL) printf("%.2f ",root->f); LeafNodes(root->Lchild); LeafNodes(root->Rchild); } } void PreOrder(BTNode *root) { if(root) { if(root->Lchild==NULL&&root->Rchild==NULL) printf("%.2f ",root->f); else printf("%c ",root->data); PreOrder(root->Lchild); PreOrder(root->Rchild); }

} void InOrder(BTNode *b) { if(b) { InOrder(b->Lchild); if(b->Lchild==NULL&&b->Rchild==NULL) printf("%.2f ",b->f); else printf("%c ",b->data); InOrder(b->Rchild); } } void PostOrder(BTNode *b) { if(b) { PostOrder(b->Lchild); PostOrder(b->Rchild); if(b->Lchild==NULL&&b->Rchild==NULL) printf("%.2f ",b->f); else printf("%c ",b->data); } } void Pop(stack &a) { a.top--; } void Push(stack &a,char e) { a.top++; a.data[a.top]=e; } char GetTop(stack a) { return(a.data[a.top]); } int Compare(char e) { if(e=='#') return 0; else if(e=='+'||e=='-') return 2;

return 3; } void PP(float s) { BTNode *T; T=(BTNode *)malloc(sizeof(BTNode)); T->f=s; Q[top++]=T; T->Lchild=T->Rchild=NULL; } void PPP(char ch) { BTNode *T,*p,*q; p=Q[--top]; q=Q[--top]; T=(BTNode *)malloc(sizeof(BTNode)); T->data=ch; T->Lchild=q; T->Rchild=p; Q[top++]=T; } void Create_Tree() { float r; int i; char num[100]; while(s[link]) if((s[link]>='0'&&s[link]<='9')||(s[link]=='-'&&link==0)||(link&&s[link]=='-'&&s[link-1]=='(')) { i=0; num[i++]=s[link++]; while(s[link]>='0'&&s[link]<='9'||s[link]=='.') num[i++]=s[link++]; num[i]='\0'; r=(float)atof(num); PP(r); } else if(s[link]=='(') { Push(c,'#'); link++; Create_Tree();

link++; } else if(s[link]==')') { while(GetTop(c)!='#') { PPP(GetTop(c)); Pop(c); } Pop(c); return; } else { while(Compare(s[link])<=Compare(GetTop(c))) { PPP(GetTop(c)); Pop(c); } Push(c,s[link++]); } while(GetTop(c)!='#') { PPP(GetTop(c)); Pop(c); } } float Calucate(BTNode *T) { float k1,k2; if(T->Lchild==NULL&&T->Rchild==NULL) return T->f; k1=Calucate(T->Lchild); k2=Calucate(T->Rchild); if(T->data=='+') return k1+k2; if(T->data=='-') return k1-k2; if(T->data=='*') return k1*k2; if(T->data=='/') return k1/k2; } int main() { top=0; link=0; printf("输入一个表达式\n");

scanf("%s",s); c.top=0; Push(c,'#'); Create_Tree(); printf("\n 叶子结点:"); LeafNodes(Q[0]); printf("\n 先序遍历:"); PreOrder(Q[0]); printf("\n 中序遍历:"); InOrder(Q[0]); printf("\n 后序遍历:"); PostOrder(Q[0]); printf("\n\n%s=%.2f\n\n",s, Calucate(Q[0])); return 0; }


相关文章:
二叉树求表达式的值.doc
标签: 二叉树| 表达式| 二叉树求表达式的值_工学_高等教育_教育专区。二叉树求表达式的值 采用波兰算法 遍历 并求二叉树表达式的值 ...
表达式二叉树.doc
表达式二叉树一、需求分析 1、对于任意给出的前缀表达式(不带括号) 、中缀表达式(可以带括号)或后缀表达式(不 带括号) ,能够在计算机内部构造出一棵表达式二叉树,...
算术表达式与二叉树.doc
算术表达式二叉树 - 目录 一、系统开发的背景 ......
表达式构建二叉树(中缀,前缀,后缀).doc
表达式构建二叉树(中缀,前缀,后缀)_计算机软件及应用_IT/计算机_专业资料。《数据结构与算法》上的一道作业题答案,本程序设计二叉树的构建,遍历以及打印等函数,能够...
表达式用二叉树表示(1).doc
表达式二叉树表示(1) - 数据结构程序报告(3) 2011.3.29 2. 需求分析: (1)功能:表达式可以用二叉树表示,对于简单的四则运算,请实现以下功能 【1】对于...
基于二叉树的算术表达式计算与实现.pdf
本文旨在研究表达式二叉 树的转换,即扫描输入的算术表达式,生成 表达式二叉树,再以先序遍历此二叉树求 取表达式的值。为由一种算术表达式得出后 缀、前缀两种...
表达式用二叉树表示.doc
表达式二叉树表示 - 对于任意给出的前缀表达式(不带括号)、中缀表达式(可以带括号)或后缀表达式(不带括号),能够在计算机内部构造出一棵表达式二叉树,并且图示出来...
表达式二叉树上机报告.doc
表达式二叉树上机报告班级:11070227 姓名:周潇 学号:11070227 完成日期:2013.4.10 一、需求分析: (1)功能:表达式可以用二叉树表示,对于简单的四则运算,请实现以下...
四则运算表达式求值(栈+二叉树,c++版).doc
运算表达式://提示 等待输入 输出 //提示 后缀表达式为://输出结果的位置 表达式的值为://输出结果的位置 四、调试分析 本次实验的难点主要是在建立二叉树的...
二叉树表达式.doc
二叉树表达式 - #include <stdio.h> #inclu
算数表达式的二叉树表示.txt
算数表达式二叉树表示_计算机软件及应用_IT/计算机_专业资料。构建算数表达式二叉树表示,并输出前缀和后缀表达式 /*中国海洋大信息科学与工程学院计算机甘言海*...
表达式与二叉树的相互转换_图文.pdf
表达式二叉树的相互转换 - ISSN 10093044 E-mail:kfy
c语言实现一.二叉树操作 二.用栈实现算术表达式求值 课....doc
c语言实现一.二叉树操作 二.用栈实现算术表达式求值 课设报告 - 沈阳理工大学课程设计专用纸 目 题目 录 一.二叉树操作(1)二.算术表达式求 ...
2-任务书-算术表达式与二叉树.doc
2-任务书-算术表达式二叉树 - 北京理工大学珠海学院计算机学院课程设计 附件
树和二叉树习题.doc
树和二叉树习题 - 第6章 树和二叉树 一、选择题 1.算术表达式 a+b*(c+d/e)转为后缀表达式后为( B ) A.ab+cde/* B.abcde/+*+ C.abcde/*++ ...
第六章 树和二叉树.doc
第六章 树和二叉树 - 第六章 树和二叉树 一、选择题 1.已知一算术表达式的中
二叉树表达式求值.doc
二叉树表达式求值 - 二叉树表达式求值 本文由邓志光 8 贡献 //二叉树上的表
二叉树应用计算表达式.pdf
二叉树应用计算表达式 - 由于时间比较匆忙,只实现了计算单个数字的,计算有十位或者更高位的还没去实现,之前 用栈做的就可以,这里用二叉树做的,一开始把...
表达式二叉树.txt
表达式二叉树 - 表达式二叉树.txt人生在世 ,难敌宿命,沉沦其中。我不爱风尘
第5章 树和二叉树(新)_图文.ppt
第5章 树和二叉树(新) - 第5章 树和二叉树 逻辑结构 集合数据元素间除
更多相关标签: