Как найти корень двоичного дерева поиска с любого узла? Более конкретно, когда я должен останавливаться при прохождении предков с любого данного узла? Есть ли какая-либо функция в java для получения корня? Пожалуйста, помогите мне.Найти корень из любого узла в BST
ответ
Я предполагаю, что вы пишете собственную реализацию BST в Java или что-то в этом роде? Если узлы хранят ссылку на родительский узел, в конечном итоге вы столкнетесь с узлом с нулевым значением для родителя при восхождении по дереву. Обычно этот узел должен быть корнем.
Если ваши узлы не хранят такую ссылку, невозможно получить доступ к корню, если все, что у вас есть, - это единственный узел. Во многих реализациях отсутствуют ссылки на родительские узлы, поскольку они сохраняют память и могут быть учтены при использовании стека при обходе дерева (для первого перехода по глубине).
Но мне непонятно, что именно вы пытаетесь сделать. Зачем вам нужен корневой узел?
Вот двоичное представление дерева узел Java
class Node{
int data;
Node leftChild;
Node rightChild;
}
Но, если мы будем следовать такого рода представления узла, то было бы трудно траверс от конечных узлов к своим предкам. Такое представление подходит для проблем, в которых дается ссылка на корневой узел вместе с оператором проблемы.
Чтобы начать перемещение с узла в любом месте в дереве, мы должны поместить ссылку на родительский элемент в классе узлов.
class Node{
int data;
Node parent;
Node leftChild;
Node rightChild;
}
Теперь, если вы начинаете обход вы должны остановиться, когда вы найдете нулевых родительский для узла.
/* the logic for traversing */
Node tempRoot = given node;
while(true){
if(null != tempRoot.parent){
tempRoot = tempRoot.parent;
}else{
break;
}
}
/* return value of tempRoot: this is your root */
[Изменить: Я не использовал геттеры и сеттеры. Хотя я не предлагаю это реализовать :)]
Если вы внедрили свой собственный BST, то у вас должен быть член данных Node root;
в вашем классе BST, вы можете получить доступ/найти корень, просто обратившись к этому элементу данных от любого метода класса BST
- 1. Поворот узла Чтобы Корень BST
- 2. Нахождение высоты BST для любого узла
- 3. Лист в корень bst traversal
- 4. Вставка узла в BST
- 5. Удаление узла из BST
- 6. Вставка узла в BST
- 7. Удаление узла в BST
- 8. BST удалить/удалить узел - корень
- 9. Вставка узла в BST
- 10. Удаление узла листа BST
- 11. PreOrder Преемник узла в BST
- 12. Удаление узла BST
- 13. Добавление узла в BST строк
- 14. java- BST рекурсивное найти значение
- 15. Удаление узла из BST без использования генераторов
- 16. Найти корень минимальной высоты, которая не является BST
- 17. Почему вставка в BST вставляет корень дважды?
- 18. Bst- Почему мой Bst работал после перебора узла * на узел * &?
- 19. BST - найти количество элементов
- 20. Java: найти глубину узла, не найденного в BST
- 21. Найти расстояние от узла до корня в BST
- 22. Найти определенный родительский узел из любого возможного дочернего узла
- 23. Найти String в BST
- 24. Учитывая BST и узел в BST, создайте этот узел, как новый корень дерева
- 25. Java-реализация узла удаления BST
- 26. Удалить дублирующие элементы из BST
- 27. найти преемника в BST без дополнительного пространства
- 28. EXC_BAD_ACCESS (EXC_i386_GPFLT) при вставке узла в BST
- 29. Удаление узла в BST нерекурсивным способом
- 30. Найти алгоритм в 2-3 дереве BST