• LeetCode 107. 二叉树的层次遍历 II | Python


    107. 二叉树的层次遍历 II


    题目

    题目来源:力扣(LeetCode)https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii


    给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

    例如:

    给定二叉树 [3,9,20,null,null,15,7],

        3
       / 
      9  20
        /  
       15   7
    

    返回其自底向上的层次遍历为:

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

    解题思路


    思路:广度优先搜索(BFS)

    先看题目,题目要求返回节点值自底向上的层次遍历。(从叶子节点所在层往根节点所在层,逐层从左到右遍历)。

    那么我们可以发现,使用广度优先搜索的方法是最直观的,题目要求自底向上,这里我从上到下遍历搜索时先用栈存储,然后再实现逆序(即自底向上)。具体的做法如下:

    • 从根节点开始搜索;
    • 每次搜索的时候先确定当前层的节点数量,遍历当前层的全部节点,用列表存储当前层的节点值;
    • 用栈存储上述存储每层节点值的列表,后续实现逆序。

    具体代码实现如下:

    # Definition for a binary tree node.
    # class TreeNode:
    #     def __init__(self, x):
    #         self.val = x
    #         self.left = None
    #         self.right = None
    
    from collections import deque
    
    class Solution:
        def levelOrderBottom(self, root: TreeNode) -> List[List[int]]:
            if not root:
                return []
            
            ans = []
    
            stack = []
    
            queue = deque()
            queue.append(root)
    
            while queue:
                cnt = len(queue)
                
                tmp = []
    
                for _ in range(cnt):
                    node = queue.popleft()
                    if node.left:
                        queue.append(node.left)
                    if node.right:
                        queue.append(node.right)
                    tmp.append(node.val)
                
                stack.append(tmp)
            
            while stack:
                ans.append(stack.pop())
            
            return ans
    

    欢迎关注


    公众号 【书所集录

  • 相关阅读:
    单词统计
    意见汇总
    项目评审结果
    注册表键值
    C++ 创建快捷方式
    XPosed 示例
    直播流程
    C++隐藏任务栏图标
    C++ 屏幕录制
    DUILIB UI创建过程
  • 原文地址:https://www.cnblogs.com/yiluolion/p/13623403.html
Copyright © 2020-2023  润新知