2014-12-07 64 views
-2

我试图写的Java程序,其可以从像一个给定的公式产生二进制树:解析forumula到二叉树

3 - 7 * 5 或 一个 - >(BVB)< - >克

我已经尝试过调车码 - Algorithmus算法,这就是这里所说的:

Algorithm for parsing first order logic formulas

,我已经明白了。因此我没有任何问题可以从给定的公式中写出反向波兰符号。我仍然不知道这应该如何帮助我从中生成一棵树。

+0

我没有看到问题。 – user4235730 2014-12-07 01:48:28

+0

快速谷歌搜索“分流院子树java”揭示http://stackoverflow.com/questions/21356772/abstract-syntax-tree-using-the-shunting-yard-algorithm,它链接到一个博客文章,确实是你在问什么。下一次,做你自己的研究。 – 2014-12-07 04:31:50

+0

@ user4235730问题是:我怎样才能生成一个树,从崇敬抛光符号,为什么它在反向抛光easyer – noctua 2014-12-07 14:05:58

回答

0

如何从RPN生成树?与评估RPN没有多大区别:您有一堆初始为空的值,并且您从左至右线性读取RPN。当你读取一个值时,你把它推到堆栈。当你阅读一个操作符时,你弹出适当数量的值,与操作员建立一个节点,并将其推入堆栈。如果一切顺利,当你读完整个RPN表达式时,你就有一个堆栈中的单个节点,它是AST的根节点。

现在,分流码算法线性地产生RPN表达式,从左到右。如何将这两种算法粘合在一起,避免创建临时向量来保存RPN?希望答案是显而易见的。