我的代码 ×
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
split = '/'
queue = []
queue.insert(0, root)
queue.insert(0, split) # 在每一层后加个分隔符
res = [[root.val]]
tmp = []
while queue:
node = queue.pop()
if node != split:
print('node.val', node.val)
if node.left:
queue.insert(0, node.left)
tmp.append(node.left.val)
if node.right:
queue.insert(0, node.right)
tmp.append(node.right.val)
print(tmp)
else:
print('/')
print('queue',queue)
if len(queue) == 0:
break
res.append(tmp)
tmp = []
queue.insert(0, split)
return res
短的还行,长的就超时了。
看参考的链接python3 归纳了三道题 一次搞懂二叉树层序遍历 比官方更简洁更易懂 广泛适用于树的层序处理
我的分隔符和tmp是没必要另外装值的,直接遍历queue中结点得值保存在res中,下面得tmp的作用是临时保存下一层的结点。
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root: return []
#split = '/'
queue = []
queue.insert(0, root)
#queue.insert(0, split)
# res = [[root.val]]
res = []
#tmp = []
while queue:
# node = queue.pop()不用一个一个弹出
res.append([node.val for node in queue]) # queue就是一层结点,res新建一个列表保存结点的值
tmp = []
for node in queue: # 用tmp获得下一层的结点
if node.left:
tmp.append(node.left)
if node.right:
tmp.append(node.right)
queue = tmp
# if node != split:
# print('node.val', node.val)
# if node.left:
# queue.insert(0, node.left)
# tmp.append(node.left.val)
# if node.right:
# queue.insert(0, node.right)
# tmp.append(node.right.val)
# print(tmp)
# else:
# print('/')
# print('queue',queue)
# if len(queue) == 0:
# break
# res.append(tmp)
# tmp = []
# queue.insert(0, split)
return res