Java двоичное дерево поиска найти ближайший лист - PullRequest
1 голос
/ 27 октября 2011

У меня проблемы с методом, который находит высоту ближайшего листа.То, что у меня есть, подсчитывает все листья.Должен ли я разделить рекурсивные вызовы на два условных оператора, чтобы проверить каждый из них независимо?любая помощь или предложения будут оценены

это мой метод

//find the distance to the closest leaf 
public int closeLeaf() 
{ 
    int distance;
    return distance = closeLeaf(root);
}

private int closeLeaf(StringNode n)
{
    int dist = 0;

    if(n == null)
    {
        dist = 0;//empty tree
    }
    else if(n.getLeft()== null && n.getRight()== null)
    {
        dist++;
    }

    else
    {

        dist =closeLeaf(n.getLeft()) + closeLeaf(n.getRight());



    }
    return dist;

}

Ответы [ 2 ]

3 голосов
/ 27 октября 2011

Возвращаемые значения

Пожалуйста, не делайте этого:

int distance;
return distance = closeLeaf(root);

Просто:

return closeLeaf(root);

На реальный вопрос

Здесьвы складываете расстояние до каждого листа:

dist = closeLeaf(n.getLeft()) + closeLeaf(n.getRight());

Возможно, вы просто хотите получить минимум двух значений (чтобы указать расстояние до ближайшего).

1 голос
/ 27 октября 2011

Вместо

dist = closeLeaf (n.getLeft ()) + closeLeaf (n.getRight ());

, который увеличивается dist для каждогообнаружен узел, используйте переменную-член класса static / , которая увеличивается при каждом вызове функции closeLeaf.

Ограничьте рекурсию поиском листа, и значение dist, когда вы найдете один, даст вам высоту ближайшего листа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...