I am new to Java programming and data structures. Nevertheless I could implement the following code after so many efforts. There I need to insert values to nodes, and print the values in each node to demonstrate all 03 types of depth first traversal techniques with the help of recursion.
- PreOrder traversal
- PostOrder traversal
- InOrder traversal
I have developed 03 separate methods to implement above 03 traversal methods. (I have commented the particular sections in the code given at the end of the question)
But when I try to run the code I get the following Error message Click here to view And for the reference I provided the error message in text format as below.
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)
I do not understand why I am getting the above error. Because in my perspective my approach is correct.
Following is the complete code I implemented
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); } }
Can somebody please look through my code and please be kind to show any stupid mistake I have made for not to run the code successfully, and the reason why I am getting above mentioned error? I am really sucked at this point.
Thanks in advance.
Advertisement
Answer
You’re missing base condition of your recursive traversal functions which is if (currentNode == null) return;
Example:
public void postOrderTraversal(BSTNode currentNode){ // Recursive function to print the values in Post-Order traversal if (currentNode == null) return; postOrderTraversal(currentNode.leftChild); postOrderTraversal(currentNode.rightChild); System.out.println(currentNode); }