二分探索木のルート ノードをパラメーターとして受け取る再帰的メソッドを作成する必要があります。この再帰メソッドは、二分探索木全体のノードの総数の int 値を返します。
これは私がこれまでに持っているものです:
public class BinarySearchTree<E> extends AbstractSet<E>
{
protected Entry<E> root;
//called by the main method
public int nodes()
{
return nodes(root);
}
//nodes() will count and return the nodes in the binary search tree
private int nodes(Entry<E> current)
{
if(current.element != null)
{
if(current.left == null && current.right == null)
{
if(current.element == root.element)
return 1;
deleteEntry(current);
return 1 + nodes(current.parent);
}
else if(current.left != null && current.right == null)
return nodes(current.left);
else if(current.left == null && current.right != null)
return nodes(current.right);
else if(current.left != null && current.right != null)
return nodes(current.left) + nodes(current.right);
} else return 1;
return 0;
}
メイン メソッドは次のようにノードを呼び出します。
System.out.println ("\nThis section finds the number of nodes "
+ "in the tree");
System.out.println ("The BST has " + bst.nodes() + " nodes");
そのため、順番に移動して検索を実行していました。子のないノードに到達したら、現在のノードを削除し、親ノードに戻って続行しました。上記のメソッドのデバッグを実行したところ、最終的にルート ノードの左側と右側のすべてのノードをカウントして削除し、1 を返そうとすると、プログラムが NullPointerException() でクラッシュします。
これは私のラボ用です。メソッドは再帰的でなければなりません。
私はこの時点で非常に迷っています。誰かが私が間違っていることを知っていますか?