繁体   English   中英

生成独特的二叉树的Python

[英]Python of generating distinct binary tree

我是Python的新程序员。 这是我的代码,它给了我错误。 我真的不知道如何解决它。

二叉树类:

 class BinaryTree:
      def __init__(self, data):
          self.data=data
          self.right=None
          self.left=None
      def inOrderTraversal(self, root):
          if root == None:
             pass
          else:
             self.inOrderTraversal(root.left)
             print root.data,
             self.inOrderTraversal(root.right)
      def printOrder(self):
          self.inOrderTraversal(self)

生成不同的所有不同的树

  def generateAllDistinctTrees(array,start,end):
      returnResultList=[]
      if start>end or start<0 or end>=len(array):
          return returnResultList.append(None)
      if start==end:
          treeNode = BinaryTree(array[start])
          return returnResultList.append(treeNode)
       for i in range(-1,end-start):
          leftResult = generateAllDistinctTrees(array,start+1,start+1+i)
          rightResult = generateAllDistinctTrees(array,start+2+i,end)
          for left in leftResult:
              for right in rightResult:
                  treeTemp = BinaryTree(array[start])
                  treeTemp.left = left
                  treeTemp.right = right
                  returnResultList.append(treeTemp)
  return returnResultList

我也尝试过使用附加方式

  def generateAllDistinctTrees(array,start,end):
      returnResultList=[]
      if start>end or start<0 or end>=len(array):
          return returnResultList.append(None)
      if start==end:
          treeNode = BinaryTree(array[start])
          return returnResultList.append(treeNode)
       for i in range(-1,end-start):
          leftResult=list()
          rightResult=list()
          leftResult.append(generateAllDistinctTrees(array,start+1,start+1+i))
          rightResult.append(generateAllDistinctTrees(array,start+2+i,end))
          for left in leftResult[0]:
              for right in rightResult[0]:
                  treeTemp = BinaryTree(array[start])
                  treeTemp.left = left
                  treeTemp.right = right
                  returnResultList.append(treeTemp)
  return returnResultList

主功能

  if __name__ == '__main__':
      preOrderData=[]
      scan = raw_input("Enter Number:")
      for i in range(0,int(scan)):
          preOrderData=preOrderData + [i+1]
      results = []
      results.append(generateAllDistinctTrees(preOrderData,0,len(preOrderData)-1))
      for eachObject in results[0]:
          eachObject.printOrder()

我使用了此代码的Java版本。 而且效果很好,没有任何错误。 但是在python中,它将给我以下错误:

对于第一个版本,如果generateAllDistinctTrees:

  Traceback (most recent call last):
      File "<stdin>", line 7, in <module>
      File "<stdin>", line 10, in generateAllDistinctTrees
      File "<stdin>", line 11, in generateAllDistinctTrees
  TypeError: 'NoneType' object is not iterable

对于generateAllDistinctTrees的第二个版本:(使用附加的)

  Traceback (most recent call last):
      File "<stdin>", line 7, in <module>
      File "<stdin>", line 9, in generateAllDistinctTrees
  NameError: global name 'leftResult' is not defined

提前致谢!!!

我在这里附上了我的屏幕截图!

在此处输入图片说明

class BinaryTree:
      left, right, data = None, None, 0

错了 它将创建属于该类而不属于实例的变量(这意味着几棵树不会有多个副本)。 正确的方法是使用self.variable = value在构造函数中分配变量。

我看到一个缩进问题,其中“通过”与应该包含它的“ def”处于同一级别。 通常,您的缩进不是非常一致,应该始终使用4个空格,返回值应该在函数内部。

修复那些容易犯的错误,以便更轻松地查看逻辑错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM