表达式转二叉树

来源:互联网 发布:linux firefox 更新 编辑:程序博客网 时间:2024/06/08 02:27

以前没学好, 一直没写过, 自己想了一会, 结合网上的资料, 罗列重点如下

 

1 需要三个栈, 在顺序扫描表达式时, 分别存放操作符和操作数; 以及最终输出的表达式栈

2 每个操作符有两种优先级,如下定义:

 

+ -, 总比* /低, 理所当然。 +的f比g大, 是因为a+b+c时, 先算a+b, 所以前面的+号优先级更好。 f就表示前面的意思。

同理 (的f比g小, 是因为((a+b)-c)时,先选a+b, 前面的(没有后面的(的优先级高。

 

每个操作符的f,g设置是需要经过严密设定的

 

 

当“下一个操作符”比栈内操作符优先级高时, 直接入栈, 继续分析下一个

当相等时(由设定知,必定都为0:括号或者$), 直接退栈, 继续分析下一个

当低时,操作符一直退栈, 至栈顶操作符优先级低于下一个操作符; 相应的操作数也要退栈,建立表达式入栈;然后将该“下一个操作符入栈”, 继续分析下一个

 

 

 

来源于 http://blog.csdn.net/dananhai/archive/2008/03/17/2191104.aspx

原创粉丝点击