[英]Printing Binary Tree in Level Order without Left or Right in Python
这个问题正在寻找一种替代本文所给出答案的方法 。
我如何创建一个字符串,该字符串在具有以下二进制树结构的新行上具有树的每个级别:
# A Node is an object
# - value : Number
# - children : List of Nodes
class Node:
def __init__(self, value, children):
self.value = value
self.children = children
我的问题是我已经习惯了像这样的树结构:
class Node(object):
def __init__(self, value, left=None, right=None):
self.value = value
self.left = left
self.right = right
这是一个示例树:
exampleTree = Node(1,[Node(2,[]),Node(3,[Node(4,[Node(5,[]),Node(6,[Node(7,[])])])])])
它将打印为:
1
23
4
56
7
对于如何使用该新结构创建定义的任何帮助或想法,将不胜感激。
您可以只使用list.extend
添加子节点,而不是一个接一个地append
它们。
class Node:
def __init__(self, value, children):
self.value = value
self.children = children
def traverse(root):
curr = [root]
while curr:
next_level = []
for n in curr:
print(n.value, end='')
next_level.extend(n.children)
print()
curr = next_level
exampleTree = Node(1,[Node(2,[]),Node(3,[Node(4,[Node(5,[]),Node(6,[Node(7,[])])])])])
traverse(exampleTree)
版画
1
23
4
56
7
(对于没有阅读问题的人,这完全是该答案的衍生)
您可以使用队列在树上执行BFS:
try:
from queue import Queue # Python 3
except ImportError:
from Queue import Queue # Python 2
q = Queue() # create new queue
q.put(root) # where "root" is the root node of the tree
while not q.empty():
curr = q.get() # get next node from queue
print(curr.value) # get node's value
for child in curr.children:
q.put(child) # add each child to the queue
请注意,此解决方案适用于所有树,而不仅仅是二叉树
编辑:对不起,没有意识到您希望所有处于同一级别的控件位于同一行输出中。 使用其他解决方案(或适当修改我的解决方案)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.