我正在练习问题Binary Tree Level Order Traversal - LeetCode
给出一棵二叉树,返回其节点值的级别顺序遍历。 (即,从左到右,逐级)。
例如: 给定二叉树
[3,9,20,null,null,15,7]
,3 / \ 9 20 / \ 15 7
将其级别顺序遍历返回为:
[ [3], [9,20], [15,7] ]
BFS解决方案
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
from collections import deque
if root == None: return []
queue = deque([root])
res = []
step = -1
while queue:
step += 1
size = len(queue)
if len(res) < step + 1:
res.append([])
for _ in range(size):
cur = queue.popleft()
res[step].append(cur.val)
#stretch
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
return res
乙炔
运行时间:44毫秒,比进行二进制树级订单遍历的Python3在线提交的75.27%快。
内存使用量:13.4 MB,不到进行二进制树级顺序遍历的Python3在线提交的5.64%。
请注意麻烦的检查:
if len(res) < step + 1:
res.append([])
删除条件检查后为
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
from collections import deque
if root == None: return []
queue = deque([root])
res = []
step = -1
while queue:
step += 1
size = len(queue)
# if len(res) < step + 1: #remove the condition checking
res.append([])
for _ in range(size):
cur = queue.popleft()
res[step].append(cur.val)
#stretch
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
return res
性能更改为
运行时间:56毫秒,比进行二进制树级订单遍历的Python3在线提交的19.04%快。
内存使用量:13.5 MB,不到进行二进制树级顺序遍历的Python3在线提交的4.52%。
从逻辑上讲,它们具有相同的性能,为什么要报告如此大的差异?