使用递归时二叉搜索树遍历执行失败

Kas*_*ath 5 java recursion binary-search-tree

我是 Java 编程和数据结构的新手。尽管如此,经过如此多的努力,我还是可以实现以下代码。在那里,我需要向节点插入值,并在每个节点中打印值,以在递归的帮助下演示所有 03 种深度优先遍历技术。

  1. 前序遍历
  2. 后序遍历
  3. 中序遍历

我开发了 03 个单独的方法来实现上述 03 个遍历方法。(我已经评论了问题末尾给出的代码中的特定部分)

但是当我尝试运行代码时,我收到以下错误消息单击此处查看为了参考,我提供了文本格式的错误消息,如下所示。

Exception in thread "main" java.lang.NullPointerException
data -> 14
data -> 5
null
    at BSTreeDemo.BSTree.preOrderTraversal(BSTreeDemo.java:75)
    at BSTreeDemo.BSTree.preOrderTraversal(BSTreeDemo.java:75)
    at BSTreeDemo.BSTree.preOrderTraversal(BSTreeDemo.java:75)
    at BSTreeDemo.BSTree.preOrderTraversal(BSTreeDemo.java:75)
    at BSTreeDemo.BSTreeDemo.main(BSTreeDemo.java:16)
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会出现上述错误。因为在我看来,我的方法是正确的。

以下是我实现的完整代码

package BSTreeDemo;

public class BSTreeDemo {

    public static void main(String[] args) {    //Main class
        BSTree t1 = new BSTree();
        t1.addNode(25);
        t1.addNode(14);
        t1.addNode(78);
        t1.addNode(45);
        t1.addNode(5);
        t1.addNode(89);
        
        System.out.println("-------------PreOrderTraversal------------");
        t1.preOrderTraversal(t1.root); 
        System.out.println("-------------PostOrderTraversal------------");
        t1.postOrderTraversal(t1.root); 
        System.out.println("-------------InOrderTraversal------------");
        t1.inOrderTraversal(t1.root); 
        
    }
    
}

class BSTNode {         // Binary Search tree node class
    int data; 
    BSTNode leftChild; 
    BSTNode rightChild; 
    
    public BSTNode(int data){ 
        this.data=data; 
    } 
    @Override 
    public String toString(){ 
        return "data -> "+data; 
    } 
}

class BSTree {
    
    BSTNode root; 
    
    public void addNode(int data) {     // method to add values to each node in binary search tree
        
        BSTNode newNode = new BSTNode(data);
        
        if(root == null){
            root=newNode;
        }
        else{
            BSTNode currentNode = root;
            while(true){
                BSTNode parentNode = currentNode;
                if(newNode.data<currentNode.data){
                    currentNode=currentNode.leftChild;
                    if(currentNode==null){
                        parentNode.leftChild = newNode;
                        return;
                    }
                }
                else{
                    currentNode = currentNode.rightChild;
                    if(currentNode ==null){
                        parentNode.rightChild = newNode;
                        return;
                    }
                }
            }
        }
    } 
    
    public void preOrderTraversal(BSTNode currentNode){ // Recursive function to print the values in Pre-Order traversal
        System.out.println(currentNode);
        preOrderTraversal(currentNode.leftChild);
        preOrderTraversal(currentNode.rightChild);
        
        
    }
    
    public void postOrderTraversal(BSTNode currentNode){ // Recursive function to print the values in Post-Order traversal
        postOrderTraversal(currentNode.leftChild);
        postOrderTraversal(currentNode.rightChild);
        System.out.println(currentNode);  
    }
    
    public void inOrderTraversal(BSTNode currentNode){   // Recursive function to print the values in In-Order traversal
        inOrderTraversal(currentNode.leftChild);
        System.out.println(currentNode);       
        inOrderTraversal(currentNode.rightChild); 
    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以查看我的代码,请显示我为没有成功运行代码而犯的任何愚蠢的错误,以及我收到上述错误的原因吗?在这一点上我真的很糟糕。

提前致谢。