-2

メインクラス: 二分木

ルートノードとバイナリツリーコンストラクターが含まれています

public class BinaryTree{
Node root;
BinaryTree (int depth){
    this.root = new Node(depth);
    root.generateTree(depth);
}

サブクラス ノード。

generateTree() メソッドはこのクラスで定義されていますが、機能しません。

ノードはツリーの枝を表します。

generateTree は二分木を返します。

class Node{
    final int LEAF = 1;
    final int BALL = 2;
    final int CANDLE = 3;
    int depth;
    int decoration;
    String color;
    boolean on;
    Node left;
    Node right;
    Node(int depth){
        this.depth = depth;
    }
    void setLeaf(){
        decoration = LEAF;
    }
    void setBall(String color){
        color = color;
    }
    void setCandle(boolean on){
        on = on;
    }
    BinaryTree generateTree(int depth) {
        if (depth == 0) {
            return root;
        }
        else if (depth > 1) {
            if (root.right == null){
                root.right = new Node(depth-1);
                root.left = new Node(depth-1);
            }
            for (int i=0; i < depth; i++){
                Node node = new Node(depth);
                node.right = new Node(depth-1);
                node.left = new Node(depth-1);
            }
        }
          generateTree(depth - 1);

    }
}
}
4

1 に答える 1

1

出力として BinaryTree を返すのではなく、ノードだけを返すメソッドを試してください。

private static Node generateTree (int depth) {
    if (depth < 0) return null;
    Node currentNode = new Node(depth);
    if (depth > 0) {
        currentNode.left = generateTree(depth-1);
        currentNode.right = generateTree(depth-1);
    }
    return currentNode;
}

編集

generateTree メソッドを Node クラスの関数として呼び出すのではなく、関数を呼び出して、その戻り値をコンストラクターに設定する必要があります。

BinaryTree (int depth) {
    this.root = generateTree(depth);
}
于 2012-12-28T10:09:02.957 に答える