leetcode 102.二叉树的层次遍历 (leetcode 103.二叉树的锯齿形层次遍历就是在102的基础上判断了奇偶数倒序。就不另写了)
两种解题思路:
1.深度优先搜索,记录每个节点是第几层的,然后先左后右的一层一层的往res的结果里面加。
# 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]]:
#深度优先遍历 dfs
#levels里保存了多个list,每个list保存了一层的节点值
levels=[]
def dfs(root,level):
#如果传入的节点是None 那么直接退出该次
if not root:
return 0
#相等的时候说明到了下一层,需要把下一层的list新建,然后往里添加节点值
if len(levels)==level:
levels.append([])
#把节点的值添加进这个层的末尾,先走的左节点,再右节点
levels[level].append(root.val)
if root.left :
dfs(root.left,level+1)
if root.right:
dfs(root.right,level+1)
#进行递归
dfs(root,0)
return levels
2.广度优先搜索,直接遍历每层的节点,然后把每层的节点保存,再遍历下一层的节点。
# 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]]:
result=[]
if not root:
return result
#从根节点开始
cur_level=[root]
#如果当前层存在节点那么开始遍历,并将下层的节点添加进next_level
#将该层节点值添加进tmp,然后将每层的tmp添加进最终的result结果
while cur_level:
tmp=[]
next_level=[]
for cur in cur_level:
tmp.append(cur.val)
if cur.left:
next_level.append(cur.left)
if cur.right:
next_level.append(cur.right)
result.append(tmp)
cur_level=next_level
return result