Python 非二叉树递归

Python 非二叉树递归,python,recursion,tree,Python,Recursion,Tree,我试图制作一个程序,建立一个非二叉树,每个节点都连接到子节点。在这个测试示例中,为了简单起见,我使用了二叉树。输入如下: 1 3 5 4 6 数字之间使用制表符。 我试图从根1开始生成树,其子节点为3和5,每个节点都有子节点4和6。 树形图可能如下所示: 4 / 3 / \ 1 6 \ / 5 \ 4 当我尝试将子对象添加到树中时,它会创建一个调用递归函数的无限循环。我已经将问题缩小到在循环中调用分支为1的函数,但下面是代码: # inpu

我试图制作一个程序,建立一个非二叉树,每个节点都连接到子节点。在这个测试示例中,为了简单起见,我使用了二叉树。输入如下:

1
3   5
4   6
数字之间使用制表符。 我试图从根1开始生成树,其子节点为3和5,每个节点都有子节点4和6。 树形图可能如下所示:

    4
   /
  3
 / \
1   6
 \ /
  5
   \
    4
当我尝试将子对象添加到树中时,它会创建一个调用递归函数的无限循环。我已经将问题缩小到在循环中调用分支为1的函数,但下面是代码:

# input is a list of branch values
file = open("treehash.txt","r")
input = file.readlines()
for line in range(len(input)):
input[line] = input[line].rstrip().split('\t')
file.close()

# create the tree node
class Tree(object):
    value = None
    children = []
    def __init__(self, value):
        self.value = value

# adds all children to a given parent
def set_children(parent, branch):
    if branch < len(input) - 1:
        for num in input[branch + 1]:
            parent.children.append(Tree(int(num)))
        for child in parent.children:
            set_children(child, branch + 1)

# store all roots in array
roots = []
for root in range(len(input[0])):
    roots.append(Tree(int(input[0][root])))
    set_children(roots[root], 0)

如果您在类中编写变量,就像在

class Tree(object):
    value = None
    children = []
它们绑定到类,而不是实例。对于值,您可以在_init__;构造函数中使用实例绑定变量覆盖它,但子级引用的列表由所有树实例共享

删除上述变量设置并改用:

class Tree(object):
    def __init__(self, value):
        self.value = value
        self.children = []

如果4和6有多个父项,则是一个图形,而不是树。4和6对于3和5是唯一的。在本例中,每种情况出现两次。但是,如果我从多个根开始,我想我有一个图。