Рекурсивный метод PrintTree () для бинарных деревьев поиска, неправильно печатающих - PullRequest
2 голосов
/ 14 июня 2019

Я пишу стандартный код для создания двоичного дерева поиска в 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)))

1 Ответ

0 голосов
/ 14 июня 2019

У вас есть if self.num, но self.num равно 0, так что это оценивается как ложное.Таким образом, вторая вставка устанавливает Узел от 0 до 1 в строке self.num=num.

...