2013-02-22 4 views
1

Я работаю над написанием BST (бинарное дерево поиска) и есть пример в книге, которую я читал, что дает этому кодуметоды Объединения (бинарное дерево поиска)

public int height() { 
    return height(root); 
} 

private int height(BinaryNode<E> node) { 
    if (node == null) { 
     return 0; 
    } else { 
     int leftHeight = height(node.left); 
     int rightHeight = height(node.right); 

     if (leftHeight < rightHeight) { 
      return 1 + rightHeight; 
     } else { 
      return 1 + leftHeight; 
     } 
    } 
} 

но нет пояснительной информации о том, почему существуют два разных метода высоты. Поэтому я прошу вас, ребята, если можно объединить эти два метода в один метод роста. Возможно, если нет. Почему нет?

Полезно для любой помощи, Bob.

ответ

1

Это пример method overloading.
Существует два метода с тем же именем, которые отличаются количеством переданных аргументов.

Первый метод не имеет параметра, второй имеет один параметр типа BinaryNode<E>.
Когда вызывается первый метод, он вызывает вторую, передающую ему переменную root (которая, как я предполагаю, имеет тип BinaryNode<E>).

Первый из них также является общедоступным, поэтому вы можете вызывать его из других классов, второй является закрытым и может быть вызван только из класса, где он определен.

1

Предполагая, что предоставленные вами методы являются частью древовидного класса, я не вижу, как вы можете объединить их. Первый - открытый метод, который не ожидает аргумента, а второй - вспомогательный рекурсивный метод, который проверяет высоту данного узла. Первый использует второе: он вызывает вспомогательный метод для самого корня. Второй метод не должен быть видимым снаружи, поэтому он является закрытым.

Если метод высоты был реализован на уровне узла, то это можно сделать с помощью одного рекурсивного метода без аргументов.

0

Обратите внимание, что метод int height() является общественностью. Это тот, который будет вызван из-за пределов вашего класса. Он должен решить высоту дерева. Он сделает это, вызвав другое.

Смотрите также, что int height(BinaryNode<E> node) является частным, поскольку он используется только методом public int height() определить высоту любого поддерева.

Смежные вопросы