-1

私はJavaでバイナリ検索ツリーを実装しており、再帰的にメソッドを記述しています。私は挿入メソッドを行いました、そして、今、私は最初のトラバースメソッドに拘束されています。私はテストコードで、いくつかの要素(tree.inorderTraversal)を追加した後、rescursive in orderメソッドでnullポインタ例外が発生し、なぜそれが見えません。挿入メソッドで何か問題がありますか?バイナリ検索ツリーヌルポインタ例外とトラバーサル

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()); 
} 

答えて

0

でなければなりません。それ以外の場合、再帰は決して終了せず、左の子ノードまたは右の子ノードが存在しない場合に、可能なnullについてtreeNode.getLeftChild()またはtreeNode.getRightChild()にアクセスするときにNPEに実行されます。

0

NULLチェックがありません。これは、最初の文は引数に、それは返す必要がありますので、それがある場合はnullをチェックする必要があり、その再帰的な方法であるため、INORDER法で

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

THanks so much! –

+0

あなたは答えを受け入れることで感謝すべきです:P – Ravi

関連する問題