将二叉树转换为 Python 级别顺序的列表
Convert binary tree to a list with level order in Python
我还没有找到任何相关的问题。
所以问题是:给定一个不完整的二叉树,比如树的根,我如何将它转换成 Python 中的级别顺序的列表,使得空节点(其中缺少节点级别)在列表中表示为“None”。
比如我有这棵树:
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
并从另一个 post 那里借用解决方案(到没有 'None' 发生的列表):
def toList(root):
node_list = []
thislevel = [root]
while thislevel:
nextlevel = list()
for n in thislevel:
# print(n.value)
node_list.append(n.value)
if n.left:
nextlevel.append(n.left)
if n.right:
nextlevel.append(n.right)
# print
thislevel = nextlevel
return node_list
my_list = toList(root)
print(my_list)
到目前为止,这给出了以下内容:
[1, 4, 0.52, 2.5]
我被困在这里,不知道如何正确地将 'None' 插入列表...
谢谢!
您通常使用 queue
对图进行广度优先迭代。这是一个先进先出的数据结构。您首先将根添加到队列中,然后当队列中有项目时,弹出最旧的一个,将其添加到结果中并将其子元素推送到队列中。如果你这样做不是为了小输入,python 的 collections.deque
比这里使用的列表更有效:
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]
我还没有找到任何相关的问题。
所以问题是:给定一个不完整的二叉树,比如树的根,我如何将它转换成 Python 中的级别顺序的列表,使得空节点(其中缺少节点级别)在列表中表示为“None”。
比如我有这棵树:
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
并从另一个 post 那里借用解决方案(到没有 'None' 发生的列表):
def toList(root):
node_list = []
thislevel = [root]
while thislevel:
nextlevel = list()
for n in thislevel:
# print(n.value)
node_list.append(n.value)
if n.left:
nextlevel.append(n.left)
if n.right:
nextlevel.append(n.right)
# print
thislevel = nextlevel
return node_list
my_list = toList(root)
print(my_list)
到目前为止,这给出了以下内容:
[1, 4, 0.52, 2.5]
我被困在这里,不知道如何正确地将 'None' 插入列表...
谢谢!
您通常使用 queue
对图进行广度优先迭代。这是一个先进先出的数据结构。您首先将根添加到队列中,然后当队列中有项目时,弹出最旧的一个,将其添加到结果中并将其子元素推送到队列中。如果你这样做不是为了小输入,python 的 collections.deque
比这里使用的列表更有效:
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]