我讨厌递归,我不能轻易地追踪代码,但是对于树,我没有选择。
这是我到目前为止所尝试过的。
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
答案 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
除此之外,你的递归似乎也很好。