-1

Ich bin eine binäre Suchbaum in Java implementieren, die Methoden rekursiv schreiben. Ich habe die Einfügemethoden gemacht, und jetzt stecke ich auf der ersten Traversalmethode, der Reihenfolge nach. Wenn ich es in meinem Testcode nach dem Hinzufügen einiger Elemente (tree.inorderTraversal) aufruft, bekomme ich eine Nullzeiger-Ausnahme bei der Methode rekursiv in Reihenfolge, und ich verstehe nicht warum. Könnte es etwas falsch mit der Einfügemethode sein?Binär Suchbaum Nullzeiger Ausnahme mit Traversal

public void insertInBinaryTree(E newItem) 
{ 
    BinaryTreeNode<E> node = new BinaryTreeNode<E>(newItem); 
    if (root == null) { 
     root = node; 
    } else { 
     insert(root, newItem); 
    } 
} 

// Recursively insert a node containing newItem into a non-empty tree. Used 
// by insertInBinaryTree 
private void insert(BinaryTreeNode<E> treeNode, E newItem) 
{ 
    if (newItem.compareTo(treeNode.getItem()) < 0) { 
     if (treeNode.getLeftChild() != null) { 
      insert(treeNode.getLeftChild(), newItem); 
     } 
     else { 
      treeNode.setLeftChild(new BinaryTreeNode<E>(newItem)); 
     } 
    } 
    else { 
     if (treeNode.getRightChild() != null) { 
      insert(treeNode.getRightChild(), newItem); 
     } 
     else { 
      treeNode.setRightChild(new BinaryTreeNode<E>(newItem)); 
     } 
    } 
} 

// If the tree is not empty, initiates an inorder traversal. This should 
// print all items in ascending order. If the tree is empty, just prints 
// "Tree is empty" 
public void inorderTraversal() 
{ 
    System.out.println("\nInorder Traversal"); 

    if (root == null) { 
     System.out.println("Tree is empty"); 
    } else {  
     inorder(root); 
    } 


} 

// Recursive inorder traversal of a non-empty tree. Used by 
// inorderTraversal. 
private void inorder(BinaryTreeNode<E> treeNode) 
{ 
    inorder(treeNode.getLeftChild()); 
    System.out.print(treeNode.getItem()); 
    inorder(treeNode.getRightChild()); 
} 

Antwort

0

Im Inorder Methode sein, und wenn es so sollte es zurück. Andernfalls wird die Rekursion nie beendet und es wird NPE aufgerufen, wenn auf treeNode.getLeftChild() oder treeNode.getRightChild() auf eine mögliche Null zugegriffen wird, wenn kein untergeordneter untergeordneter Knoten oder kein rechter untergeordneter Knoten vorhanden ist.

0

Sie fehlen NULL-Prüfung. Es sollte die erste Anweisung sollte für null auf das Argument überprüfen, da seine rekursive Methode

private void inorder(BinaryTreeNode<E> treeNode) 
{ 
    if(treeNode != null) 
    { 
    inorder(treeNode.getLeftChild()); 
    System.out.print(treeNode.getItem()); 
    inorder(treeNode.getRightChild()); 
    } 
} 
+0

Vielen Dank! –

+0

Sie sollten danken, indem Sie die Antwort akzeptieren: P – Ravi