0

基本的に、タイプツリーの各ノードにデータフィールドとブランチのリストを持たせることができるようにしたいと思います。このリストには、Treeタイプのオブジェクトがいくつか含まれている必要があります。リストの実際の実装は下にあると思いますが、getLeavesメソッドを使用しようとすると奇妙な動作をします。基本的に、それは再帰的にそれ自体を呼び出し、決して戻りません、そして起こる方法はどういうわけかツリーの2番目のノードがそれ自身として設定された最初のブランチを取得することです(私は思います)。

class Tree:
    """Basic tree graph datatype"""
    branches = []

    def __init__(self, root):
        self.root = root

    def addBranch (self, addition):
    """Adds another object of type Tree as a branch"""
        self.branches += [addition]

    def getLeaves (self):
        """returns the leaves of a given branch. For leaves of the tree, specify root"""
        print (len(self.branches))
        if (len(self.branches) == 0):
            return self.root
        else:
            branchSum = []
            for b in self.branches:
                branchSum += b.getLeaves()
            return (branchSum)
4

3 に答える 3

0

self.rootその木の親ですか?その場合、ブランチ()がない場合は、そこにあるのではなく、getLeaves()戻る必要があります。また、子ブランチがある場合は、内に含める必要があります。selflen(self.branches)==0self.rootselfbranchSum

于 2012-04-30T18:59:06.963 に答える
0

考えられる解決策(小さな変更を加えたソースコード):

class Tree:
    def __init__(self, data):
        """Basic tree graph datatype"""
        self.data = data
        self.branches = []

    def addBranch (self, addition):
        """Adds another object of type Tree as a branch"""
        self.branches.append(addition)

    def getLeaves (self):
        """returns the leaves of a given branch. For 
           leaves of the tree, specify data"""
        if len(self.branches) == 0:
            return self.data
        else:
            branchSum = []
            for b in self.branches:
                branchSum.append(b.getLeaves())
            return branchSum

## Use it

t0 = Tree("t0")
t1 = Tree("t1")
t2 = Tree("t2")
t3 = Tree("t3")
t4 = Tree("t4")

t0.addBranch(t1)
t0.addBranch(t4)
t1.addBranch(t2)
t1.addBranch(t3)

print(t0.getLeaves())

出力:

[['t2', 't3'], 't4']

備考:

  1. コードの一部のフォーマットが壊れているようです。
  2. これがあなたが望むものであるかどうかは本当にわかりません。リストの1つのレベルにすべての葉を入れますか?(その場合、ソースコードを適合させる必要があります。)
于 2012-04-30T19:38:41.867 に答える
0

'branches'変数は、インスタンスメンバーではなく、クラスメンバーです。コンストラクターで「branches」インスタンス変数を初期化する必要があります。

class Tree:
    """Basic tree graph datatype"""

    def __init__(self, root):
       self.branches = []
       self.root = root

コードの残りの部分は良さそうです。

于 2012-04-30T21:06:49.187 に答える