问题描述
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
代码思路
1 BFS
广度优先搜索的方法,关键要看每层如何结束
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return[]
queue=collections.deque()
result=[]
queue.append(root)
while queue:
levelSize=len(queue)
curLevel=[]
for i in range(levelSize):
node=queue.popleft()
curLevel.append(node.val)
if node.left:
queue.append(node.left)
if node.right:
queue.append(node.right)
result.append(curLevel)
return result
在这里引用了双端队列,导入可第一个节点,当双端队列不为空,进行一次目前节点数的遍历,每次将左边的元素pop,将他计入该层的数组中,并判断其左右节点是否为空,不为空则将其加入双端队列
2DFS
在深度优先搜索同时要记住每个数的level。建立二维数组如下进行填充,时间复杂度也为O(n)。
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
if not root:
return []
self.result=[]
self.dfs(root,0)
return self.result
def dfs(self,node,level):
if not node:
return
if len(self.result)<level+1:
self.result.append([])
self.result[level].append(node.val)
self.dfs(node.left,level+1)
self.dfs(node.right,level+1)