7

次のコードを実装して、バイナリ検索ツリーをレベル順に出力しました。

public void printLevelOrder(int depth) {
    for (int i = 1; i <= depth; i++) {
        printLevel(root, i);
    }
}

public void printLevel(BinaryNode<AnyType> t, int level) {
    if (t == null) {
        return;
    }
    if (level == 1) {
        System.out.print(t.element);
    } else if (level > 1) {
        printLevel(t.left, level - 1);
        printLevel(t.right, level - 1);
    }
}

特定の形式で出力するようにコードを改善する方法を見つけようとしています。

例として、与えられた木

    1 
   / \
  2   3
 /   / \
4   5   6

現在、次のように印刷されます。

123456

私はそれを次のように印刷するために探しています:

Level 0: 1
Level 1: 2 3
Level 2: 4 5 6
4

1 に答える 1

11

再帰関数呼び出しのすぐ内側に値を出力する代わりに、文字列を使用して値を保持します。これにより、出力の操作が簡単になります。

public void printLevelOrder(int depth) {
    for (int i = 1; i <= depth; i++) {
        System.out.print("Level " + (i-1) + ": ");
        String levelNodes = printLevel(root, i);
        System.out.print(levelNodes + "\n");
    }
}

public String printLevel(BinaryNode<AnyType> t, int level) {
    if (t == null) {
        return "";
    }
    if (level == 1) {
        return t.element + " ";
    } else if (level > 1) {
        String leftStr = printLevel(t.left, level - 1);
        String rightStr = printLevel(t.right, level - 1);
        return leftStr + rightStr;
    }
    else // you need this to get it to compile
      return "";
}

出力:

Level 0: 1 
Level 1: 2 3 
Level 2: 4 5 6 
于 2012-11-01T23:31:55.800 に答える