0

今後の CS コースのために、誰かが二分木を理解するのを手伝ってくれることを願っています。より具体的には、誰かがこの問題で私を助けることができるかどうか疑問に思っていました:「すべてのアイテムが二乗されたツリーを返す」

これは私のクラスツリーです:

clas Tree(object):
 def __init__(self, entry, left=None, right=None):
        self.entry = entry
        self.left = left
        self.right = right

def __repr__(self):
    args = repr(self.entry)
    if self.left or self.right:
        args += ', {0}, {1}'.format(repr(self.left), repr(self.right))
    return 'Tree({0})'.format(args)   

したがって、t という名前のツリーがある場合、t は次のように定義されます。

t = Tree(1,Tree(2,Tree(3)),Tree(4,Tree(5)))

tとして帰りたいTree(1,Tree(4,Tree(9)),Tree(16,Tree(25)))

だから私は二乗ツリーを返すこの関数を思いつきましたが、「なし」を取り除きたいです

def square_tree(tree,fn):
    if(tree == None):
        return tree
    else:
        tree.entry = fn(tree.entry)
        map_tree(tree.left,fn)
        map_tree(tree.right,fn)
    return tree

出力: Tree(4, Tree(9, Tree(16), None), Tree(25, Tree(36), None))

助言がありますか?

4

2 に答える 2

2

ツリーは再帰的な構造です。通常、ツリー操作プログラムを作成する最も簡単な方法は再帰です。再帰的なステップについて考えてみましょう。

木があり、すべての要素を二乗したいとします。したがって、次のことが必要です。

  • ルート要素を二乗する
  • 左右のサブツリーのすべての要素を 2 乗します

宿題なのでヒントはこれくらいでいいのですが…

于 2013-01-15T19:18:27.880 に答える
1

t = Tree(1,Tree(2,Tree(3)),Tree(4,Tree(5)))

tは

Tree(1, Tree(2, Tree(3), None), Tree(4, Tree(5), None))

クラス repr は None リーフを表示しています。そうしたくない場合は、repr を修正してください。

于 2013-01-15T20:18:20.023 に答える