This question has already been answered:
When checking the contains method, an error occurs. If we entered a value that is in the tree, the program returns true, as intended, but if the value is not in the tree, I get Exception in thread "main" java.lang.NullPointerException.
package Tree; import Tree.Comparat.TreeInterface; /** * Created by Spring on 15.12.2017. */ public class Tree<E extends Comparable> implements TreeInterface<E> { Node<E> root; public Tree(E value){ root = new Node<E>(value); } public Node<E> getRoot() { return root; } @Override public void insert(E element) { Node<E> newNode = new Node<E>(element); if (root == null) { root = newNode; } else { recursiveInsert(root, newNode); } } public void recursiveInsert(Node<E> current, Node<E> newNode){ if((current.compareTo(newNode) < 0) && current.getRight()==null){ current.setRight(newNode); } else if((current.compareTo(newNode) < 0) && current.getRight()!=null) { recursiveInsert(current.getRight(), newNode); } else if((current.compareTo(newNode) > 0) && current.getLeft()==null){ current.setLeft(newNode); } else if((current.compareTo(newNode) > 0) && current.getLeft()!=null) { recursiveInsert(current.getLeft(), newNode); } } @Override public void display() { Node<E> root = getRoot(); recursiveDisplay(root); } public void recursiveDisplay(Node<E> current){ Node<E> leftNode = current.getLeft(); Node<E> rightNode = current.getRight(); if(leftNode !=null){ leftNode.nodeDisplay(); recursiveDisplay(leftNode); } if(rightNode !=null){ rightNode.nodeDisplay(); recursiveDisplay(rightNode); } } @Override public boolean contains(E element) { Node<E> root = getRoot(); Node<E> nodeToFind = new Node<E>(element); return recursiveFind(root, nodeToFind)!= null; } public Node<E> recursiveFind(Node<E> current, Node<E> nodeToCompare){ if(current.compareTo(nodeToCompare) == 0) return current; else if (current.compareTo(nodeToCompare) > 0) return recursiveFind(current.getLeft(),nodeToCompare); else if (current.compareTo(nodeToCompare) < 0) return recursiveFind(current.getRight(),nodeToCompare); return null; } @Override public boolean delete(int a) { return false; } public static void main(String[] args) { Tree<Integer> tree = new Tree<Integer>(10); tree.insert(4); tree.insert(88); tree.insert(5); tree.insert(6); tree.insert(20); tree.insert(22); System.out.println(tree.contains(10)); System.out.println(tree.contains(5)); System.out.println(tree.contains(6)); System.out.println(tree.contains(22)); System.out.println(tree.contains(666)); } } The result of the program:
Exception in thread "main" java.lang.NullPointerException at Tree.Tree.recursiveFind(Tree.java:82) at Tree.Tree.recursiveFind(Tree.java:89) at Tree.Tree.recursiveFind(Tree.java:89) at Tree.Tree.contains(Tree.java:76) at Tree.Tree.main(Tree.java:115) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) true true true true at java.lang.reflect.Method.invoke(Method.java:498) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) Process finished with exit code 1