二叉树的层序遍历

二叉树的层序遍历

思路

层序遍历:逐层从左到右访问节点
用队列,先进先出

  • 迭代法:推荐
    使用双头队列deque放置每一层的结点
    时间复杂度O(n):虽然while和for,但每个结点进一次,出一次,O(1)*N=O(n)
    空间复杂度O(n)
    BFS的模板背下来
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]: 
       #迭代法
        res=[]
        #为空处理
        if not root:
            return res
        #用双头队列
        from collections import deque
        que=deque([root])
        while que:
            size=len(que)
            tmp_res=[]
            #当前层遍历
            for _ in range(size):
                cur=que.popleft()
                tmp_res.append(cur.val)
                if cur.left:
                    que.append(cur.left)
                if cur.right:
                    que.append(cur.right)
            res.append(tmp_res)
        return res   
  • 递归法:不推荐,递归适合深度优先搜索
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        #递归法
        res=[]
        def helper(root, depth):
            #终止条件
            if not root:
                return []
            if len(res)==depth:
                #开始当前层遍历
                res.append([])
            #填充当前层
            res[depth].append(root.val)
            #开始下一层
            if root.left:
                helper(root.left, depth+1)
            if root.right:
                helper(root.right, depth+1)
        helper(root,0)
        return res            
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值