二进制搜索树的递归PrintTree()方法无法正确打印

时间:2019-06-14 02:14:18

标签: python recursion binary-search-tree

我正在编写用于从列表L用Python创建二进制搜索树的标准代码。其想法是递归地以格式(数据,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 :(得分:0)

您有if self.num,但self.num为0,因此它的值为false。因此,第二次插入将其在行self.num=num上的节点0设置为1。