Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中将二叉树转换为具有级别顺序的列表_Python_List_Binary Tree_Breadth First Search - Fatal编程技术网

在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

我还没有发现任何相关问题

因此,问题是:给定一个不完整的二叉树,比如树的根,我如何在Python中将其转换为一个按级别顺序排列的列表,以便将空节点(该级别中缺少的节点)表示为列表中的“无”

例如,我有一棵树:

     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]