二叉树的层序遍历

Leetcode地址:102. 二叉树的层序遍历 - 力扣(LeetCode) (leetcode-cn.com)

广度优先搜索(BFS):

用一个队列保存要访问的节点,一个双层list保存访问结果

queue存储一层的节点,当queue为空时,该层访问完,退出该层;

每次访问节点的时候,从左到右存储子节点到queue里。

双层循环

时间复杂度:O(n)

空间复杂度:O(n)

代码如下:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        queue,visited=[],[]
        if root:
            #visited.append([root.val])
            queue.append(root)
        while queue:
            layer=[]
            tmp=[]
            while queue:
                node=queue.pop(0)
                layer.append(node.val)
                if node.left:
                    tmp.append(node.left)
                if node.right:
                    tmp.append(node.right)
            visited.append(layer)
            queue=tmp
        return visited

听说需要用DFS来扩展一下思维,所以这不就来了咩

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        visited=[]
        return self.dfs(root,visited,0)
    
    def dfs(self,node,visited,level):
        if node is None:
            return visited
        if len(visited)>=level+1:
            visited[level].append(node.val)
        else:
            visited.append([])
            visited[level].append(node.val)
        if node.left:
            visited=self.dfs(node.left,visited,level+1)
        if node.right:
            visited=self.dfs(node.right,visited,level+1)
        return visited

 TODO项:关于DFS与BFS,看到一个很好的题解,对于DFS、BFS的适用场景进行了讨论

LeetCode 例题精讲 | 13 BFS 的使用场景:层序遍历、最短路径问题 (qq.com)​​​​​​

BFS的应用场景一:层序遍历

二叉树的右视图_一只禾的博客-CSDN博客

二叉树的锯齿形层序遍历_一只禾的博客-CSDN博客

在每个树行中找最大值_一只禾的博客-CSDN博客

二叉树的层平均值_一只禾的博客-CSDN博客

BFS的应用场景二:最短路径

二叉树的最小深度_一只禾的博客-CSDN博客


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值