算术表达式二叉树表示

这段代码实现将中缀表达式转换为二叉表达树,并进行前序和后序遍历,输出对应的前缀和后缀表达式。使用C语言编写,基于栈操作处理运算符和操作数。
摘要由CSDN通过智能技术生成
这是在学校时作为一个热心人在CSDN论坛上解决的一个 问题,最近用到了这个算法,重写看来是有难度了,之前没留过这些代码,好在论坛上还能搜到。看看以前写的代码,很有意思啊:)还是留在我的地盘比较放心,copy/paste一下吧。算法是那么回事,程序很多毛病啊

/**
 * 假设输入的中缀表达式为: 
 * (a+b)*((c+d)*e+f*h*g) 
 *
 * 1)以二叉链表的存储结构创建一棵。
 * 2)先根遍历为:此中缀表达式的前缀表达式 
 * 3)后根遍历为:此中缀表达式的后缀表达式  
 *
 * 2005/04/28
 */
#include<stack> 
#include<iostream> 
#include<stdio.h> 
#include<ctype.h> 
#include<string.h> 
using   namespace   std; 

// 
//   数据类型定义区 
// 
typedef   struct nodeTag{ /*   表达式二叉树结点类型   */ 
    union{ 
        int opnd; 
        char optr; 
    }val; 
    struct   nodeTag *left; 
    struct   nodeTag *right; 
}treeNode; 

typedef   struct pTag{ /*   优先表结点类型   */ 
    char op; 
    int f; 
    int g; 
}Prior; 

// 
//   全局变量定义区 
// 
Prior pList[]   =   { /*   优先表   */ 
    '+',   2,   1, 
    '-',   2,   1, 
    '*',   4,   3, 
    '/',   4,   3, 
    '^',   4,   5, 
    '(',   0,   5, 
    ')',   6,   0, 
    '$',   0,   0 
}; 
stack<char> OptrStack; /*   操作符栈   */ 
stack<treeNode*> ExprStack; /*   表达式栈   */ 
const   int   NUM =   256; 
const   int   OPTR =   257; 
int tokenval; /*   下一输入值   */ 

/************************************************************************** 
*   descr     :比较栈顶运算符与下一输入运算符优先关系 
*   param     :opf   栈顶运算符 
*   param     :opg   下一输入运算符 
*   return   :关系'>',   '=',   '<' 
**************************************************************************/ 
char   Prece
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值