leetcode 102. binary-tree-level-order-traversal 二叉树的层序遍历 python3

时间:2020-8-3

题目地址:

https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

题目难度:

Medium

题目描述:

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

示例:
二叉树:[3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回其层次遍历结果:

[
  [3],
  [9,20],
  [15,7]
]


思路1:BFS 多处理一步

在每一层遍历开始前,先记录队列中的结点数量 n(也就是这一层的结点数量),然后一口气处理完这一层的 n 个结点。

代码段1:通过

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        if root == None: return []
        stack = [root]
        res = []
        while stack:
            n = len(stack)
            temp = []
            for i in range(n):
                node = stack[0]
                del stack[0]
                temp.append(node.val)
                if node.left != None:
                    stack.append(node.left)
                if node.right != None:
                    stack.append(node.right)
            res.append(temp)
        return res

总结:

  1. BFS好写,关键是要 二维数组这个点,需要改进一下,我自己没啥思路,看了一下别人的算法,写出来

  2. 后续做一下 层序遍历的一些变种题目:

    LeetCode 103. Binary Tree Zigzag Level Order Traversal 之字形层序遍历
    LeetCode 199. Binary Tree Right Side View 找每一层的最右结点
    LeetCode 515. Find Largest Value in Each Tree Row 计算每一层的最大值
    LeetCode 637. Average of Levels in Binary Tree 计算每一层的平均值

  3. BFS的应用:层序遍历、最短路径【LeetCode 1162. As Far from Land as Possible 离开陆地的最远距离(Medium)】

  4. fuxuemingzhu大佬总结的模版

# 如果不需要确定当前遍历到了哪一层,BFS模板如下。

while queue 不空:
    cur = queue.pop()
    for 节点 in cur的所有相邻节点:
        if 该节点有效且未访问过:
            queue.push(该节点)
"""
如果要确定当前遍历到了哪一层,BFS模板如下。
这里增加了level表示当前遍历到二叉树中的哪一层了,也可以理解为在一个图中,现在已经走了多少步了。size表示在当前遍历层有多少个元素,也就是队列中的元素数,我们把这些元素一次性遍历完,即把当前层的所有元素都向外走了一步。
"""

level = 0
while queue 不空:
    size = queue.size()
    while (size --) {
        cur = queue.pop()
        for 节点 in cur的所有相邻节点:
            if 该节点有效且未被访问过:
                queue.push(该节点)
    }
    level ++;


后续优化:

  1. 层序遍历的变种题
  2. 最短路径【LeetCode 1162. As Far from Land as Possible 离开陆地的最远距离(Medium)】
  3. 用DFS解决https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/tao-mo-ban-bfs-he-dfs-du-ke-yi-jie-jue-by-fuxuemin/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值