我正在尝试编写一个Java程序,它可以从给定的公式生成二进制树,如:
3 - 7 * 5 要么 a - > (b v b)< - >克
我已经尝试过Shunting-yard-Algorithmus算法,这里提到:
Algorithm for parsing first order logic formulas
我已经理解了。因此,从给定的公式中编写反向波兰表示法我没有问题。我仍然不知道这应该如何帮助我从中生成一棵树。
答案 0 :(得分:0)
如何从RPN生成树?它与评估RPN没什么不同:你有一堆值,最初是空的,你从左到右线性地读取RPN。读取值时,将其全部推送到堆栈。读取运算符时,弹出适当数量的值,使用运算符创建节点,然后将nide推入堆栈。如果一切顺利,当您读取整个RPN表达式时,堆栈上有一个节点,它是AST的根。
现在,分流码算法从左到右线性地产生RPN表达式。如何将这两种算法粘合在一起,避免创建临时向量来保存RPN?希望答案非常明显。