二叉树数据结构

时间:2015-11-17 00:00:01

标签: java tree binary-tree

我目前正在为我的数据结构类解决这个二叉树(非二叉搜索树)问题。但是,当我尝试从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);
    }
}

1 个答案:

答案 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();
    }
}