0

これは私のtoString()ですが、正しく機能しません

public String toString() {
        StringBuilder str = new StringBuilder("{");
        traverse(root, str);
        str.append("}");

        return str.toString();
    }

    private void traverse(TreeNode node, StringBuilder str){
        if (node == null){
            return;
        }

        if (node.left != null) {
            traverse(node.left, str);
            str.append(", ");
        }

        str.append(node.left);

        if (node.right != null) {
            str.append(", ");
            traverse(node.right, str);
        }
    }

これは、メソッドが出力するものです:{null、AbstractTreeMap $ TreeNode @ 15a8767}

どんな助けでも大歓迎です。ありがとうございました

4

2 に答える 2

2
if (node.left != null) {
      inOrder(node.left, result);
      result.append(", ");
}

result.append(node.left); //should not be node.left

代わりにこれを行う

if (node.left != null) {
     inOrder(node.left, result);
     result.append(", ");
}

result.append(node); //this will print the node itself

また、メソッドがオーバーライドされてTreeNodeいないため、ハッシュコードが表示されます。toString()

于 2013-03-01T04:51:10.037 に答える
0
  1. 再帰メソッドは、result.append(node.left)ではなくresult.append(node)を呼び出す必要があります

  2. TreeNodeクラスはtoString(ノードIDを表示)をオーバーライドする必要があります。そうしないと、「AbstractTreeMap $ TreeNode @ 15a8767」のようなデフォルトのtoString(オブジェクトから)が表示されます。

于 2013-03-01T04:50:48.060 に答える