以级别顺序打印树的内容,使用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库。你有没有想过这些?