-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 回答