评估二进制表达式树的算法?

时间:2012-11-04 20:34:40

标签: java recursion

我讨厌递归,我不能轻易地追踪代码,但是对于树,我没有选择。

这是我到目前为止所尝试过的。

private int evaluate(Node n)
{
    if (n != null)
    {
        if (n.isLeaf())  // n is a node with a number
            return Integer.parseInt(n.element);
        else
        {
            int left = evaluate(n.left);
            int right = evaluate(n.right);
            return calculate(left, n.element, right);
        } //end else
    } //end if
} //end evaluate

2 个答案:

答案 0 :(得分:0)

你的意思是:

return calculate(left, n.element, right);

我假设你的节点是一个操作,即“+”,“ - ”等。

你的“计算”必须在int“left”和“right”上执行相应的操作,你就完成了!

答案 1 :(得分:0)

该方法不为每个路径提供有效的返回。因此,您需要在方法的末尾添加return ...。我认为零是合适的,因为在你的递归中实际上从未访问过这条路径。

private int evaluate(Node n)
{
    if (n != null)
    {
        if (n.isLeaf())  // n is a node with a number
            return Integer.parseInt(n.element);
        else
        {
            int left = evaluate(n.left);
            int right = evaluate(n.right);
            return calculate(left, n.element, right);
        } //end else
    } //end if
    return 0;
} //end evaluate

除此之外,你的递归似乎也很好。