2012-12-28 144 views
-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); 

    } 
} 
} 

回答

0

而不是返回二叉樹作爲輸出,嘗試具有僅返回一個節點中的方法:

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

EDIT

而不是調用generateTree方法的函數Node類,你應該調用該函數並在構造函數中設置它的返回值。

BinaryTree (int depth) { 
    this.root = generateTree(depth); 
} 
+0

感謝您的回答。但該方法需要返回一個二叉樹。 –

+0

如果是這樣,我會更新我的帖子來解釋如何去做。 –