Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java二叉树实现中的对象链接异常_Java_Data Structures_Binary Tree - Fatal编程技术网

Java二叉树实现中的对象链接异常

Java二叉树实现中的对象链接异常,java,data-structures,binary-tree,Java,Data Structures,Binary Tree,我实现了一个简单的二叉树程序,但是在遍历树时遇到了一个问题,只访问根元素。我怀疑这些节点没有链接。我尽了最大努力去解决这个问题,但没有发现我的代码有任何问题 在退出函数之前,我尝试了从插入函数打印数据,但没有正确打印数据 public class BinaryTree { Node root; public void addNode(int data){ Node newNode = new Node(data); if(root == n

我实现了一个简单的二叉树程序,但是在遍历树时遇到了一个问题,只访问根元素。我怀疑这些节点没有链接。我尽了最大努力去解决这个问题,但没有发现我的代码有任何问题

在退出函数之前,我尝试了从插入函数打印数据,但没有正确打印数据

public class BinaryTree {

    Node root;

    public void addNode(int data){

        Node newNode = new Node(data);

        if(root == null){
            root = newNode;
        }
        else{
            Node currentNode = root;
            while(true){
                if(data <= currentNode.data){
                    currentNode = currentNode.leftChild;
                    if(currentNode == null){
                        currentNode = newNode;
                        return;
                    }
                } 
                else{
                    currentNode = currentNode.rightChild;
                    if(currentNode == null){
                        currentNode = newNode;
                        return;
                    }
                }
            }

        }
    }

    public void inorderTraversal(Node currentNode){

        if(currentNode != null){

            inorderTraversal(currentNode.leftChild);

            System.out.print(currentNode.data + " ");

            inorderTraversal(currentNode.rightChild);

        }
    }

}
公共类二进制树{
节根;
公共void addNode(int数据){
Node newNode=新节点(数据);
if(root==null){
根=新节点;
}
否则{
节点currentNode=root;
while(true){

如果(data您没有将元素分配给
子元素。您只是将其分配给未链接到树的局部变量
currentNode

按照下面的代码放入
while
循环中&它应该适合您

            if(data <= currentNode.data){
                if(currentNode.leftChild == null){
                    currentNode.leftChild = newNode;
                    return;
                }
                else {
                     currentNode = currentNode.leftChild;
                }
            } 
            else{
                if(currentNode.rightChild == null){
                    currentNode.rightChild = newNode;
                    return;
                }
                else {
                     currentNode = currentNode.rightChild;
                }
            }

if(数据事实上,在递归步骤中,您没有正确地将新节点添加到树中。您应该使用的逻辑是,当您到达一个左或右指针为
null
的节点,并且新节点属于该方向时,您应该将新节点添加到左或右。否则,继续遍历,直到您到达h这样的节点

while(true) {
    if (data <= currentNode.data) {
        if (currentNode.leftChild == null) {
            currentNode.leftChild = newNode;
            return;
        }
        else {
            currentNode = currentNode.leftChild;
        }
    else {
        if (currentNode.rightChild == null) {
            currentNode.rightChild = newNode;
            return;
        }
        else {
            currentNode = currentNode.rightChild;
        }
    }
}
while(true){

如果(事实上,你从未将新节点添加到树中。你所做的只是将新节点分配给一个局部变量。你需要像
leafNode.leftChild=newNode
。现在这只是我答案的副本。好的,我明白了。非常感谢。是的,我知道这段代码不会创建一个平衡的树,我计划学习并实现它。)在这之后,我再也不用漂白了。