题目
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
python解答
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
# 第一种采用层次遍历的方式
# if not root: return []
# quene = []
# quene.append(root)
# self.res = []
# while quene:
# lenq = len(quene)
# tres = []
# for i in range(lenq):
# node = quene.pop(0) # 左边出
# if node.left:quene.append(node.left)
# if node.right:quene.append(node.right)
# tres.append(node.val)
# self.res.append(tres)
# return self.res
# 第二种采用深度优先搜索,采用递归实现
if not root: return []
self.res = []
self.find(root, 0)
return self.res
def find(self, root, level):
if not root: return None
if len(self.res) < level + 1:
self.res.append([])
self.res[level].append(root.val)
self.find(root.left, level + 1)
self.find(root.right, level + 1)
解析:
- 第一种层次遍历中用了一个队列。使用了二叉树的广度优先搜索策略
- 第二种采用的是深度优先搜索策略,注意在递归的过程中有个level表示层参数。