在Python中将二叉树转换为具有级别顺序的列表
我还没有发现任何相关问题 因此,问题是:给定一个不完整的二叉树,比如树的根,我如何在Python中将其转换为一个按级别顺序排列的列表,以便将空节点(该级别中缺少的节点)表示为列表中的“无” 例如,我有一棵树:在Python中将二叉树转换为具有级别顺序的列表,python,list,binary-tree,breadth-first-search,Python,List,Binary Tree,Breadth First Search,我还没有发现任何相关问题 因此,问题是:给定一个不完整的二叉树,比如树的根,我如何在Python中将其转换为一个按级别顺序排列的列表,以便将空节点(该级别中缺少的节点)表示为列表中的“无” 例如,我有一棵树: 1 / \ 4 0.52 / \ / \ 2.5 我想得到以下列表: [1, 4, 0.52, None, 2.5, None, None] 通过使用以下函数: list = toList(root) 此外,我有这样的树结构: clas
1
/ \
4 0.52
/ \ / \
2.5
我想得到以下列表:
[1, 4, 0.52, None, 2.5, None, None]
通过使用以下函数:
list = toList(root)
此外,我有这样的树结构:
class TreeNode:
def __init__(self, value, isLeaf):
self.left = None
self.right = None
self.value = value
self.isLeaf = isLeaf
并从另一篇文章中借用解决方案(到没有“无”发生的列表中):
到目前为止,这提供了以下信息:
[1, 4, 0.52, 2.5]
我被困在这里,不知道如何正确地在列表中插入“无”
谢谢 通常通过使用
队列
对图形进行广度优先迭代。这是一种先进先出的数据结构。首先将根添加到队列中,然后当队列中有项目时,弹出最旧的项目,将其添加到结果中,并将其子项推送到队列中。如果您对小输入以外的任何内容执行此操作,python的效率比此处使用的列表更高:
class TreeNode:
def __init__(self, value, isLeaf):
self.left = None
self.right = None
self.value = value
self.isLeaf = isLeaf
def breadth_first(t):
q = [t]
while q:
current = q.pop(0)
yield current.value if current else None
if current and not current.isLeaf:
q.extend([current.left, current.right])
t = TreeNode(1, False)
t.left = TreeNode(4, False)
t.right = TreeNode(0.52, False)
t.left.right = TreeNode(0.2
list(breadth_first(t))
# [1, 4, 0.52, None, 0.25, None, None]
您是否已尝试创建不带“无”的列表?i、 e.您是否有用于杠杆订单的代码,而不考虑缺少的节点?如果没有,请先尝试并发布您的尝试。是的,请查看更新后的帖子为什么列表中没有
2.5
节点的子节点的None
值?2.5节点是否与最终列表中的0.52
节点有所不同?None
的确切值是多少?root
,它太抽象了。我认为它只输出到树的高度。由于2.5
位于树的底部,因此它没有附加任何“None”。而<代码> 0.52 <代码>在树的中间,所以我们应该考虑到它的两个孩子都错了。你当然是对的。把我的错误归咎于周末大脑综合症。编辑。
class TreeNode:
def __init__(self, value, isLeaf):
self.left = None
self.right = None
self.value = value
self.isLeaf = isLeaf
def breadth_first(t):
q = [t]
while q:
current = q.pop(0)
yield current.value if current else None
if current and not current.isLeaf:
q.extend([current.left, current.right])
t = TreeNode(1, False)
t.left = TreeNode(4, False)
t.right = TreeNode(0.52, False)
t.left.right = TreeNode(0.2
list(breadth_first(t))
# [1, 4, 0.52, None, 0.25, None, None]