这个问题正在寻找this post中给出的答案的替代方案。
如何使用以下二进制树结构创建一个包含树的每个级别的字符串的字符串:
# A Node is an object
# - value : Number
# - children : List of Nodes
class Node:
def __init__(self, value, children):
self.value = value
self.children = children
我的问题是我已经习惯了这样的Tree Structures:
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
非常感谢有关如何使用该新结构创建定义的任何帮助或想法。
答案 0 :(得分:1)
您可以使用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
(对于没有阅读过这个问题的人来说,这完全是this answer)
的衍生物答案 1 :(得分:0)
您可以使用队列在树上执行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
请注意,此解决方案适用于所有树,而不仅仅是二进制
编辑:对不起,没想到你想让同一级别的所有人都在同一行输出中。使用其他解决方案(或适当地修改我的)