Java 计算二叉表达式树的算法?

Java 计算二叉表达式树的算法?,java,recursion,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 = eva

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

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

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
你是说:

return calculate(left, n.element, right);
我假定您的节点是一个操作,即“+”、“-”等


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

该方法没有为每个路径提供有效的返回。因此,您需要在方法末尾添加
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

除此之外,您的递归似乎状态良好。

您做得很好,您所需要的只是一个简单的、非递归的calcilate来完成您的练习。。。别忘了回复。如果你也把你的代码有问题的地方贴出来,那会有很大的帮助。它是“方法必须返回一个值”。该方法在某些情况下返回一个值,但编译器不理解。我弄乱了calculate函数,无法让它按我想要的方式工作,但我有返回语句。但我使用的是声音的递归。我对递归非常陌生。当
n==null
或抛出
NullPointerException
时,需要返回一个值。是的,我正在修复该方法以进行计算。我对递归一无所知,所以我在看它是否有效。谢谢,我让我的计算方法起作用了,递归也起作用了。我把它放在适当的位置,只是用999999而不是0。我想我在调试时会得到0作为一个合法的答案,所以999999可以作为更好的指南。但是谢谢,我只是不相信自己会使用递归,所以我很高兴我开始做对了。正如其他人所说,你实际上可以抛出一个异常。就像我说的,这个路径(据我从代码中了解)永远不会被你的程序访问。目前,calculate方法有很多复杂的地方,所以为了调试的目的,这个数字现在就起作用了