【发布时间】:2011-05-08 13:04:40
【问题描述】:
我有两个堆栈,一个带有操作数,另一个带有运算符。我的问题是将这两个堆栈变成二叉树。
例如,表达式(2+3)*(4-3)
将被翻译成后缀(如24+43-*)然后放入两个堆栈
3442 和 *-+ 将是堆栈(顶部分别为 3 和 *)。
现在有了这些堆栈,我需要像这样形成一个二叉树
*
+ -
2 3 4 3
有没有办法递归地做到这一点?
现在,我有一个这样的算法:
创建树的根,将根的值分配给运算符堆栈中的第一个运算符。将左右指针设置为空。
创建正确的节点,如果存在则分配下一个运算符的值,如果不存在则分配一个操作数。然后对左边的节点做同样的事情。
我的问题是让它递归,或者让它处理许多不同的情况。
感谢您的帮助。
【问题讨论】:
-
你稍微弄乱了数字堆栈。下面 Let_Me_Be 的回答看起来不错,您需要更多详细信息吗?
-
更多细节会很好。具体来说,我可以找到最高的运算符,但我不确定如何拆分表达式或“适用于两个部分”。
-
您的方法似乎有缺陷:它要求运算符的每一侧都有相同数量的操作数和运算符。使用此表达式
(2+3)-4会产生与2+(3-4)相同的堆栈。 -
阿德里安,你能给点建议吗?
-
您的描述似乎不是唯一的。例如,给定堆栈
4321和*-+,你能判断它应该是(1+2)*(3-4)还是((1+2)-3)*4?