如何将孙子添加到python树?

时间:2013-11-27 11:54:06

标签: python algorithm data-structures recursion tree

我正在尝试在python中实现Tree,我发现this线程并试图使用我自己的树,但我不知道如何添加大孩子。

我想要构建的树就像:

Root
    ch1
        ch2
            ch3
            ch4

所以我认为add_child()方法应该是递归的:

1,如果树没有子节点,请将子节点添加到Root

2,对于Root的每个孩子,如果其中一个孩子等于parent,则将孩子添加到其中并停止循环(因此新孩子实际上是一个大孩子)。

3,如果没有匹配,请在当前孩子身上调用add_child()

但是我的代码给了我:

Root
    ch1
        ch2
            ch3
                ch4

Btw,每次我使用递归算法我感到困惑,有人能给我一些关于如何编写递归代码的好建议吗?还是有任何好的教程?

class Node(object):
    def __init__(self, data, parent=None):
        self.data = data
        self.children = []
        self.parent = parent

    def __repr__(self, level=0):
        ret = "\t" * level + repr(self.data) + "\n"
        for child in self.children:
            ret += child.__repr__(level + 1)
        return ret

    def add_child(self, node, parent):

        if self.children == []:
            self.children.append(node)
            return

        for child in self.children:
            if child == parent:
                child.children.append(node)
                return
            else:
                child.add_child(node, parent)

        # self.children.append(node)


if __name__ == '__main__':

    tree = Node('Root')
    tree.add_child(Node('ch1'), 'Root')
    tree.add_child(Node('ch2'), 'ch1')
    tree.add_child(Node('ch3'), 'ch2')
    tree.add_child(Node('ch4'), 'ch2')
    print tree

1 个答案:

答案 0 :(得分:1)

以下部分没有意义:

if self.children == []:
    self.children.append(node)
    return

如果节点没有子节点,您会自动将节点添加到该节点吗?如果应将节点添加到其他父节点怎么办?

你可能想写:

def add_child(self, node, parent):
    if self.data == parent:
        self.children.append(node)
        return
    for child in self.children:
        child.add_child(node, parent)

按预期生成树。