Мне нужно создать рекурсивный метод, который принимает в качестве параметра корневой узел двоичного дерева поиска. Этот рекурсивный метод затем вернет значение 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");
Так я бегу поиск, путешествуя в порядке, как только я получаю к узлу без детей я бы удалял текущий узел и возвращался к родительскому узлу и продолжал. Я выполнил отладку метода, который у меня выше, и программа вылетает с помощью NullPointerException(), когда он, наконец, подсчитывает и удаляет все узлы с левой и правой стороны корневого узла и пытается вернуть 1.
Это для моей лаборатории метод ДОЛЖЕН быть рекурсивным.
Я очень потерялся в этот момент, кто-нибудь знает, что я делаю неправильно?
Вы должны добавить немного объяснения к ответу, а также. – rghome