0

给定 (M, F) - 对于某个过程的每一步,元组变为 (M + F, F) 或 (M, M + F)。因此,从 (1, 1) 开始,以下是可能的:

在此处输入图像描述 我在绘制树时遵循的算法是 -

If not root, 
left_ child = (parent0 + parent1, parent1)

and right_child = (parent0, parent0 + parent1)

其中 parent0 指的是父元组的第一个元素,而 parent1 指的是第二个元素。

我完全不确定在给定 M 和 F 的任何起始值的情况下,我将如何创建一棵树,该树将遵循上述算法在 n 步后创建树。

当我决定在线搜索时,我得到了一些类似的东西:

class Tree(object):
    def __init__(self):
        self.left = None
        self.right = None
        self.data = None

root = Tree()
root.data = "root"
root.left = Tree()
root.left.data = "left"
root.right = Tree()
root.right.data = "right"

或者

class Tree:
    def __init__(self, cargo, left=None, right=None):
        self.cargo = cargo
        self.left  = left
        self.right = right

    def __str__(self):
        return str(self.cargo)

tree = Tree(1, Tree(2), Tree(3))

我想不出一种方法来使用上面的代码来构建我想要的状态空间树。也就是说,当给定的输入是(M,F)和n是过程中的步骤数(即树中的级别数)时,我如何实现一个自动创建具有计算值的子树的树。

4

1 回答 1

1

您所需要的只是一个包含两个值而不是一个值的树,以及一些自动生成子树的属性:

class SpaceTree:
    def __init__(self, M=1, F=1):
        self.M= M
        self.F= F
        self._left= None
        self._right= None

    @property
    def left(self):
        if self._left is None:
            self._left= SpaceTree(self.M+self.F, self.F)
        return self._left

    @property
    def right(self):
        if self._right is None:
            self._right= SpaceTree(self.M, self.F+self.M)
        return self._right

    def __repr__(self):
        return 'SpaceTree({}, {})'.format(self.M, self.F)

现在您可以创建一棵树并根据需要遍历它:

>>> SpaceTree()
SpaceTree(1, 1)
>>> SpaceTree().left
SpaceTree(2, 1)
>>> SpaceTree().left.right
SpaceTree(2, 3)
于 2017-07-02T22:38:18.487 回答