【LeetCode】102 and 2016(二叉树的层序遍历)

层序遍历

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

什么是层序遍历呢?简单来说,层序遍历就是把二叉树分层,然后每一层从左到右遍历:
在这里插入图片描述
具体求解可以使用BFS遍历框架:

def bfs(root):
    que = collections.deque([])
    if root:
    	que.append(root)
    result = []
    while (que):
        node = que.popleft()
        result.append(node.val)
        if (node.left != None):
            que.append(node.left)
        
        if (node.right != None):
            que.append(node.right)

细微的区别在于,BFS遍历结果为一维数组,而层序遍历结果为二维数组。在遍历过程中我们无法区分队列中的结点来自哪一层。
因此,我们需要稍微修改一下代码,在每一层遍历开始前,先记录队列中的结点数量 n(也就是这一层的结点数量),然后一口气处理完这一层的 n 个结点。具体我们通过具体实例进行展示。

102. 二叉树的层序遍历

在这里插入图片描述
在这里插入图片描述
解法:广度优先遍历(BFS)

import collections
class Solution:
    def levelOrder(self, root: TreeNode) -> List[List[int]]:
        que = collections.deque([])
        if root:
            que.append(root)
        result = []
        while que:
            temp = []
            n = len(que)
            # 相较于BFS遍历框架,层序遍历修改处
            for _ in range(n):
                node = que.popleft()
                temp.append(node.val)
                if node.left:
                    que.append(node.left)
                if node.right:
                    que.append(node.right)
            result.append(temp)
        return result

2016. 增量元素之间的最大差值

在这里插入图片描述
解法:后缀最大值法
官方思路的逆向思维。
在这里插入图片描述

class Solution:
    def maximumDifference(self, nums: List[int]) -> int:
        result = -1
        max_val = nums[-1]
        for i in range(len(nums)-2, -1, -1):
            if nums[i] < max_val:
                result = max(max_val-nums[i], result)
            else:
                max_val = nums[i]
        return result
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值