【问题标题】:Recursive PrintTree() method for binary search trees not correctly printing二叉搜索树的递归 PrintTree() 方法无法正确打印
【发布时间】:2019-10-28 15:26:31
【问题描述】:

我正在编写用于从列表 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)))

【问题讨论】:

    标签: python recursion binary-search-tree


    【解决方案1】:

    您有 if self.numself.num 为 0,因此计算结果为 false。所以第二次插入它在self.num=num 行将节点0 设置为1。

    【讨论】:

    • 哦!谢谢!没想到
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-27
    • 1970-01-01
    • 2017-03-25
    相关资源
    最近更新 更多