0

私は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 の 2 番目のバージョンの場合: (追加のものを使用)

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

前もって感謝します!!!

ここにスクリーンショットを添付しました!!

ここに画像の説明を入力

4

1 に答える 1

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

これは間違っています。インスタンスではなく、クラスに属する変数を作成します (つまり、複数のツリーに複数のコピーが存在することはありません)。正しい方法は、self.variable = value を使用して、コンストラクターで変数を割り当てることです。

「パス」がそれを含むべき「定義」と同じレベルにあるインデントの問題が発生します。一般に、インデントはあまり一貫していません。常に 4 つのスペースを使用する必要があり、リターンは関数内にある必要があります。

これらの簡単な間違いを修正して、論理的な間違いを簡単に確認できるようにします。

于 2013-10-30T22:56:49.223 に答える