力扣 二叉树的层序遍历

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
在这里插入图片描述

思路:这道题要求将树每一层的值存一个列表,所有层的列表存一个列表中
所以使用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())
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值