力扣 二叉樹的層序遍歷

給你一個二叉樹,請你返回其按 層序遍歷 得到的節點值。 (即逐層地,從左到右訪問所有節點)。
在這裏插入圖片描述

思路:這道題要求將樹每一層的值存一個列表,所有層的列表存一個列表中
所以使用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())
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章