-2

私は再帰が嫌いで、コードを簡単にトレースすることはできませんが、ツリーでは選択の余地がありません。

これは私がこれまでに試したことです。

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
4

2 に答える 2

0

つまり:

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

あなたのノードは操作、つまり「+」、「-」などだと思います。

あなたの「計算」は、int「左」と「右」で対応する操作を実行する必要があり、完了です!

于 2012-11-04T20:37:43.273 に答える
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

これとは別に、再帰は良好な状態にあるようです。

于 2012-11-04T21:02:56.330 に答える