1、题目
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
输出:
[
[3],
[9,20],
[15,7]
]
2、解答
- BFS:广度优先遍历,对于层次遍历来说,BFS是使用最多的。需要使用一个队列来维护每次遍历的每一层的节点。
- DFS:深度优先遍历,这个用来进行层次遍历就是得知道每次遍历的节点所在的层。
def levelOrder(self, root):
"""
bfs:广度优先遍历
:type root: TreeNode
:rtype: List[List[int]]
"""
if root is None:
return []
res = []
quene = []
quene.append(root)
while len(quene)>0:
size = len(quene)
level_list = []
while size>0:
cur = quene.pop(0)
if cur.left is not None:
quene.append(cur.left)
if cur.right is not None:
quene.append(cur.right)
size -= 1
level_list.append(cur.val)
res.append(copy.deepcopy(level_list))
return res
def levelOrder2(self, root):
"""
dfs:深度优先遍历,使用DFS来进行层次遍历需要知道遍历的节点所在的层
:type root: TreeNode
:rtype: List[List[int]]
"""
res = []
self.dfs(root, res, 0)
return res
def dfs(self, node, res, level):
if node is None:
return
if len(res)<level+1:
res.append([])
if node.left is not None:
self.dfs(node.left, res, level+1)
if node.right is not None:
self.dfs(node.right, res, level+1)
res[level].append(node.val)