2015-11-17 136 views
0

我目前正在为我的数据结构类解决这个二叉树(不是二叉搜索树)问题。然而,当我试图打印从根树,调试表明,根仍然空甚至通过我初始化我的树二叉树数据结构

public class Node { 

    int integerValue = 0; 
    public Node leftNode = null; 
    public Node rightNode = null; 

    public Node (int inputInt){ 
     this.integerValue = inputInt; 
    } 
} 

插入数组元素树明知不会有删除或添加

public class BinaryTree { 
    public void initializeTree(int[]string, int length, int currentPosition, Node currentNode){ 
     if(currentPosition < length){ 
      Node newNode = new Node(string[currentPosition]); 
      currentNode = newNode; 
      initializeTree(string,length, 2*currentPosition +1, currentNode.leftNode); 
      initializeTree(string,length, 2*currentPosition +2, currentNode.rightNode); 
     } 
    } 

    public void printTree(Node root){ 
     if(root != null){ 
      System.out.print(root.integerValue + " "); 
      printTree(root.leftNode); 
      printTree(root.rightNode); 
     } 
    } 
} 

public class Main { 
    public static void main(String[] args) { 
     int [] array = {0,1,2}; 
     ArrayTree tree = new ArrayTree(); 
     BinaryTree bTree = new BinaryTree(); 
     Node root = null; 
     Node currentNode = root; 

     bTree.initializeTree(array, 3, 0, currentNode); 
     bTree.printTree(root); 
    } 
} 

回答

0

当您将currentNode参数传递给初始化程序时,您传递的是对象的引用(指针),在本例中为null。当你的方法重新分配变量:

currentNode = newNode;

现在currentNode引用一个新的节点实例,但在主类currentNode变量没有更新,因此它将保持空。

我建议您为BinaryTree类而不是“初始化程序”方法使用构造函数。此外,长度参数不是必需的(string.length做同样的事情)。

最后,您可以将Node和BinaryTree统一在一个类中。

public class BinaryTree { 
    Integer integerValue; 
    BinaryTree left, right; 

    public BinaryTree(int[] string, int currentPosition) { 
     if (currentPosition < string.length){ 
      this.integerValue = string[currentPosition]; 
      this.left = new BinaryTree(string, 2 * currentPosition + 1); 
      this.right = new BinaryTree(string, 2 * currentPosition + 2); 
     } 
    } 

    public void printTree() { 
     if (this.integerValue != null){ 
      System.out.print(this.integerValue + " "); 
      this.left.printTree(); 
      this.right.printTree(); 
     } 
    } 
} 

和主类:

public class Main { 
    public static void main(String[] args) { 
     int [] array = {0, 1, 2}; 
     BinaryTree root = new BinaryTree(array, 0); 
     root.printTree(); 
    } 
}