Я сейчас читаю книгу Взламывая код интервью , пытаясь получить уровень спуска в коде (хотя я далек от этого).
Вопрос в следующем: Учитывая отсортированный (в порядке возрастания) массив с уникальными целочисленными элементами, напишите алгоритм для создания двоичного дерева поиска с минимальной высотой.
Вот моя попытка.
class Node:
def __init__(self,value):
self.value = value
self.left = None
self.right = None
class binaryTree:
def __init__(self,nodes,root):
self.nodes = nodes
self.root = root
def minimalTree(sortedArray):
if not sortedArray:
return None
else:
lengthArray = len(sortedArray)
middle = lengthArray//2
print("middle = ", middle)
root = Node(sortedArray[middle])
leftArray = array.array('i',[])
rightArray = array.array('i',[])
if middle == 0:
return root
if middle > 0:
leftArray = sortedArray[0:middle]
root.left = Node(leftArray[len(leftArray)//2])
if middle + 1 < lengthArray:
rightArray = sortedArray[middle+1:lengthArray]
root.right = Node(leftArray[len(rightArray)//2])
return minimalTree(leftArray),minimalTree(rightArray)
Как видите, я на самом деле не использую класс binaryTree, но я не уверен, что он полезен, поскольку дерево может быть задано его root.
Тем не менее я борюсь с рекурсивными алгоритмами, и я не понимаю, почему этот ничего не возвращает.
Обратите внимание, что мой вопрос не столько о правильности или эффективности предложенного мной алгоритма (хотя комментарии по этому поводу также приветствуются).
Редактировать: Я отредактировал код, пытаясь включить базовый вариант в соответствии с предложением.