以级别顺序打印树的内容,使用eval函数读取python中的输入树

以级别顺序打印树的内容,使用eval函数读取python中的输入树,python,recursion,tree,tuples,Python,Recursion,Tree,Tuples,部分问题需要按级别顺序打印树,因此如果输入树为: ("hello", (("a", ()), ("b", (("cde", ()), ("fg", ()))))) 那么输出应该是, hello a b cde fg *注意:输入树可以有任意数量的子树* 这里的独特之处在于,应该使用 tree = eval(input('Enter tree: ')) 大多数类似的问题倾向于使用节点类和/或队列组件,我没有发现它们对这个问题有帮助,我也找不到任何使用eval函数进行输入的情况 这就是我

部分问题需要按级别顺序打印树,因此如果输入树为:

("hello", (("a", ()), ("b", (("cde", ()), ("fg", ()))))) 
那么输出应该是,

hello

a b

cde fg
*注意:输入树可以有任意数量的子树*

这里的独特之处在于,应该使用

tree = eval(input('Enter tree: '))
大多数类似的问题倾向于使用节点类和/或队列组件,我没有发现它们对这个问题有帮助,我也找不到任何使用eval函数进行输入的情况

这就是我到目前为止所做的

def级别顺序(节点):
标签,子节点=节点
打印(标签)
对于儿童中的儿童:
层级顺序(子级)
tree=eval(输入('entertree:'))
层级顺序(树)

我当前的程序能够打印内容,我认为这是一种预顺序遍历。如何使其按级别顺序打印?

您需要对树进行宽度优先遍历

def level_order(*nodes):
    if not nodes: # base case
       return
    # all the labels and all the groups of chilren for this "level"
    labels,childrens = zip(*nodes)
    print("\t".join(labels))
    # flatten the list so instead of [[c1,c2],[c3,c4,c5,...]] we get [c1,c2,c3,...]
    flattened_children = [c for children in childrens for c in children]
    # call recursively
    level_order(*flattened_children)

level_order(("hello", (("a", ()), ("b", (("cde", ()), ("fg", ()))))) )

你需要以一种广度优先的方式在树上行走……这非常有效!谢谢我唯一不明白的是asteriks做了什么,即*节点和*展平的子节点?pls1,尽管我试图找到一些用于树解析/遍历的bultin库。你有没有想过这些?