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

二叉树表达式


#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; }


相关文章:
算术表达式与二叉树
算术表达式二叉树 - 目录 一、系统开发的背景 ......
表达式用二叉树表示(1)
表达式二叉树表示(1) - 数据结构程序报告(3) 2011.3.29 2. 需求分析: (1)功能:表达式可以用二叉树表示,对于简单的四则运算,请实现以下功能 【1】对于...
二叉树表达式求值
二叉树表达式求值_电脑基础知识_IT/计算机_专业资料。数据结构,二叉树表达式求值,代码今日推荐 157份文档 2015国家公务员考试备战攻略 ...
二叉树表达式求值
二叉树表达式求值 本文由邓志光 8 贡献 //二叉树上的表达式求值算法 #include <stdio.h> #include <stdlib.h> #include <string.h> #define max 100 typedef...
四则运算表达式求值(栈+二叉树,c++版)
运算表达式://提示 等待输入 输出 //提示 后缀表达式为://输出结果的位置 表达式的值为://输出结果的位置 四、调试分析 本次实验的难点主要是在建立二叉树的...
表达式二叉树代码
表达式二叉树代码_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 表达式二叉树代码_计算机软件及应用_IT/计算机_专业资料。#include<...
简易计算器(二叉树)
实验三——简易计算器(二叉树) 05111341 班 李凌豪 1120131263 1.需求分析 1.1.问题重述 (1)问题描述 由键盘输入一算术表达式, 以中缀形式输入,试编写程序将...
15算术表达式与二叉树
15算术表达式二叉树_数学_自然科学_专业资料。《数据结构与算法》课程设计任务书题目: 算术表达式二叉树 学生姓名: 班级: 题目类型:软件工程(R) 指导教师: ...
树和二叉树——数据结构实验报告
实习报告题目:编写一个实现基于二叉树表示的算术表达式 Expression 操作程序 班级: 姓名: 学号: 完成日期// 一、 需求分析算术表达式 Expression 内可以含有变量(a...
表达式类型的实现(二叉树)
C++代码 二叉树 7页 2财富值如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行反馈。 表达式类型的实现(二叉树) 用二叉树实现前...
更多相关标签: