給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
思路:這道題要求將樹每一層的值存一個列表,所有層的列表存一個列表中
所以使用BFS(廣度優先),逐層遍歷(同時確定遍歷的層數)是可行的
同時DFS(深度優先),可以使用字典記錄 層數:[數值]。也是可行的
1.BFS模板
遍歷時不用明確層數
while queue:
cur=queue.popleft()
'''取出節點'''
'''對此節點遍歷'''
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
'''下一層非空結點加入隊列'''
遍歷時要求明確層數(每次while循環,一層個結點)
while queue:
size=len(queue)
for i in range(size):
'''遍歷本層'''
cur=queue.popleft()
'''取出節點'''
'''對此節點遍歷'''
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
'''下一層非空結點加入隊列'''
代碼
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
queue = collections.deque()
queue.append(root)
lt=[]
if not root:
return []
while queue:
size=len(queue)
l=[]
while size:
size-=1
cur=queue.popleft()
if cur.left:
queue.append(cur.left)
if cur.right:
queue.append(cur.right)
l.append(cur.val)
if l!=[]:
lt.append(l)
return lt
2.DFS代碼
class Solution:
def levelOrder(self, root: TreeNode) -> List[List[int]]:
dt={}
def dg(root,n,dt):
if not root:
return
if not dt.get(n):
dt[n]=[root.val]
else:
dt[n].append(root.val)
dg(root.left,n+1,dt)
dg(root.right,n+1,dt)
dg(root,1,dt)
return list(dt.values())