如何递归生成二叉树?

时间:2012-12-28 10:01:02

标签: java tree binary-tree

主类:二叉树

它包含根节点和二叉树构造函数

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);

    }
}
}

1 个答案:

答案 0 :(得分:0)

不要将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);
}