Я пишу стандартный код для создания двоичного дерева поиска в Python из списка L. Идея состоит в том, чтобы рекурсивно вывести дерево в формате (data, left_subtree, right_subtree).Он работает с каждым списком, но когда я беру L = range (n), он просто не включает первый элемент.
Например, когда я делаю:
ввод: L=[3, 8, 1, 13, 5, 9]
вывод: (3, (1, None, None), (8, (5, None, None), (13, (9, None, None), None))))
но когда я делаю:
ввод: L=range(4) #L=[0,1,2,3]
вывод: (1,None,(2,None,(3,None,None)))
Куда делись 0?
Должно быть:
вход: L=range(4) #L=[0,1,2,3]
выход: (0,None,(1,None,(2,None,(3,None,None))))
Это мой код:
class Nodo:
def __init__(self, num):
self.left = None
self.right = None
self.num = num
def insert(self, num):
if self.num:
if num < self.num:
if self.left is None:
self.left= Nodo(num)
else:
self.left.insert(num)
elif num > self.num:
if self.right is None:
self.right = Nodo(num)
else:
self.right .insert(num)
else:
self.num = num
def Print(self,nodo):
if nodo:
return "("+str(nodo.num)+","+self.Print(nodo.left)+","+self.Print(nodo.right )+")"
else:
return "None"
def binary_tree(L):
if len(L)>0:
raiz = Nodo(L[0])
for i in range(1,len(L)):
raiz.insert(L[i])
return raiz.Print(raiz)
else:
return "None"
print(binary_tree(range(4)))