用于二进制搜索树的Recursive PrintTree()方法无法正确打印

2024-10-01 17:24:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写用Python从列表L创建二叉搜索树的标准代码。其思想是以如下格式递归打印树(数据、左_子树、右_子树)。它适用于每个列表,但当我取L=range(n)时,它不包括第一个元素

例如,当我这样做时:

input:L=[3, 8, 1, 13, 5, 9]

output:(3, (1, None, None), (8, (5, None, None), (13, (9, None, None), None))))

但当我这样做的时候:

input:L=range(4) #L=[0,1,2,3]

output:(1,None,(2,None,(3,None,None)))

0去了哪里

应该是:

input:L=range(4) #L=[0,1,2,3]

output:(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)))

Tags: selfrightnonereturnifdefrangeleft

热门问题