【问题标题】:Computing the value of a Binary Expression Tree计算二叉表达式树的值
【发布时间】:2013-11-26 15:40:41
【问题描述】:

我有一个二叉树构造函数,它将在字符串中使用前缀符号并最终打印出如下内容:

|-- *
    |-- 2
    |-- +
        |-- 4
        |-- +
            |-- 6
            |-- 7

这棵树的前缀表示法是:(* 2 (+ 4 (+ 6 7))) 该值应该是:2*17 = 34。我知道在计算这些树时会使用堆栈,但我不知道如何去做。

我的想法是有两个堆栈。一种用于运算符,一种用于操作数。放入两个操作数时,取出最后一个操作数,新的操作数放在哪里?

另外,我需要使用上面的树,并返回一个后缀、中缀和前缀表示法。每次我尝试这样做时,它都会吐出一个前缀符号。

【问题讨论】:

    标签: java recursion binary-tree expression-trees


    【解决方案1】:

    这真的很简单:

    int eval(tree) {
        if tree is just a number return that number
        else {
            l = eval(tree.left)
            r = eval(tree.right)
            return result of operation on l and r
        }
    }
    

    同样,对于打印。前缀意味着,您首先打印操作符,然后是左子树,然后是右子树。后缀意味着:首先是左子树,然后是右子树,然后是运算符。

    只有中缀有点复杂,因为您可能需要在括号中打印子树。

    【讨论】:

      【解决方案2】:

      据我了解,没有必要有两个堆栈。如果我没记错的话,评估树的算法既可以递归实现,也可以通过堆栈实现——只要堆栈顶部是一个运算符,就可以将堆栈顶部替换为相应操作的表达式的值。我相信这种方法与该术语的所谓“波兰符号”有关。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多