Да, есть решение O (n). Обратите внимание, что в порядке обхода в BST итерирует элементы в нужном порядке, поэтому просто выполните обход по порядку в первоначально пустом дереве размера n и заполните его с элементами в списке. [I-й элемент, который вы вставляете в дерево при обходе, это i-й элемент в списке].
В конце ответа я добавил, как создать пустое сбалансированное дерево в O(n)
.
псевдокод : [предполагается | список | == | дерево |]
global current <- null
fillTree(tree,list):
current <- list.head
fillTree(tree)
fillTree(tree):
if tree == null:
return
fillTree(tree.left)
//in-order traversal: we set the value after setting left, and before calling right
tree.val <- current.val
current <- current.next
fillTree(tree.right)
Сложность тривиальна O(n)
, поскольку для каждой вершины дерева существует ровно одна итерация, и каждая итерация равна O (1).
EDIT:
Вы можете создать пустое сбалансированное дерево , просто создав пустое полное дерево (*), оно сбалансировано и построено как O (n).
(*) Полное двоичное дерево - это двоичное дерево, в котором каждый уровень, кроме, возможно, последнего, полностью заполнен.