Topic
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。
(即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
Solution
虽然每日一题是103,但102题是103题的基础
所以先解决102题
想查看103题点这里103. 二叉树的锯齿形层序遍历
又是令人心旷神怡的二叉树
首先判断给定的二叉树根不为空,若空则返回空
建立返回的节点值列表为ans
本题可以运用广度优先算法解决
(后来看大佬们都用collections的双端队列解决,直接用列表的pop(0)也行)
(听大佬说collections的方法更好,那就两种都用一遍)
将二叉树的根节点放在a中
由于本题遍历后的结果是列表套列表的形式,所以在ans中要加入的元素是以列表b为形式的
以a存在为条件进行按层序遍历
对于单层遍历:
按照从左至右的顺序一一判断
先将当前节点判断出为node
同时将当前节点值加入b中
对于当前此节点
如果在下一层存在左子节点则把左子节点加入a中
如果在下一层存在右子节点则把右字节点加入a中
判断完成后对同层其他的节点进行判断
最后按照每层一个列表为新元素
每层的值b加入结果ans中
并在下一层遍历时清空列表b
Code_1
列表判断方法
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
ans = []
a = [root]
while a:
n = len(a)
b = []
for i in range(n):
node = a.pop(0)
b.append(node.val)
if node.left:
a.append(node.left)
if node.right:
a.append(node.right)
ans.append(b)
return ans
Code_2
collections方法
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
ans = []
a = collections.deque()
a.append(root)
while a:
n = len(a)
b = []
for i in range(n):
node = a.popleft()
b.append(node.val)
if node.left:
a.append(node.left)
if node.right:
a.append(node.right)
ans.append(b)
return ans