繁体   English   中英

在Python中按级别顺序打印二叉树而没有左或右

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM