У меня есть теоретический вопрос о Balanced BST
.
Я хотел бы построить Perfect Balanced Tree
с 2^k - 1
узлами из обычного unbalanced BST
. Самое простое решение, которое я могу придумать, - это использовать отсортированный Array/Linked list
и рекурсивно разделить массив на подмассивы и построить из него Perfect Balanced BST
.
Однако в случае очень больших размеров дерева мне нужно будет создать Array/List
того же размера, поэтому этот метод будет потреблять большой объем памяти.
Другой вариант — использовать AVL
функции поворота, вставляя элемент за элементом и балансируя дерево поворотами в зависимости от Tree Balance Factor — три высоты левого и правого поддеревьев.
Мои вопросы: прав ли я в своих предположениях? Есть ли другой способ создать идеальный BST
из несбалансированного BST
?