非二叉树递归

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非二叉树递归相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个程序来设置一个非二叉树,每个节点都连接到子节点。在这个测试示例中,为简单起见,我使用了二叉树。输入是这样的:

1
3   5
4   6

(在数字之间使用制表符)。我试图从root(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('	')
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 = []

他们被绑在课堂上,而不是一个实例。对于value,您使用__init__构造函数中的实例绑定变量覆盖它,但children引用的列表由所有Tree实例共享。

删除上面的变量设置并使用:

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

以上是关于非二叉树递归的主要内容,如果未能解决你的问题,请参考以下文章

非二叉树遍历方法

如何在非二叉树中找到最长路径并将其返回到向量中?

如何以增量方式构建非二叉树(具有依赖关系)

非二叉树的中序树遍历

[建树(非二叉树)] 1106. Lowest Price in Supply Chain (25)

如何基于 preorder&inorder 或 postorder&inorder 遍历构造非二叉树?