在Python中没有左或右的级别顺序打印二进制树

时间:2018-01-28 04:59:44

标签: python python-3.x binary-tree

这个问题正在寻找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

非常感谢有关如何使用该新结构创建定义的任何帮助或想法。

2 个答案:

答案 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

请注意,此解决方案适用于所有树,而不仅仅是二进制

编辑:对不起,没想到你想让同一级别的所有人都在同一行输出中。使用其他解决方案(或适当地修改我的)