我目前正在为我的数据结构类解决这个二叉树(非二叉搜索树)问题。但是,当我尝试从root打印树时,调试显示root甚至通过初始化我的树仍为null
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 :(得分:0)
当您将currentNode参数传递给初始值设定项时,您传递了对象的引用(指针),在本例中为null。在方法中,您重新分配变量:
currentNode = newNode;
现在currentNode引用了一个新的Node实例,但Main类上的currentNode变量没有更新,因此它将保持为null。
我建议你使用BinaryTree类的构造函数而不是&#34;初始化程序&#34;方法。此外,长度参数不是必需的(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();
}
}