leetcode hot100 199. 二叉树的右视图 medium 层序遍历dfs


广度优先搜索 (BFS) ------ 层序遍历法

这是最直觉的方法。一层一层地遍历树,只记录每一层的最后一个节点。

工具:队列(Queue)。

步骤:

  1. 把根节点放进队列。
  2. 当队列不为空时,计算当前层的节点数 n。
  3. 循环 n 次,把这一层的所有节点都弹出来。
  4. 关键点:当你处理到这一层的第 n 个(即最后一个)节点时,把它存入结果列表

时间复杂度O(N)

我们必须访问树中的每一个节点(每个节点进出队列各一次),N 为节点总数。
空间复杂度O(W)

W 是树的最大宽度(即节点最多的一层)。在满二叉树中,最后一层大约有 N/2 个节点,所以空间复杂度最坏也是 O(N)。

python 复制代码
# 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

from collections import deque
class Solution:
    def rightSideView(self, root: Optional[TreeNode]) -> List[int]:
        if not root:
            return []
        
        q = deque([root])  # 从顶层开始, deque放当前处理层的元素

        res = []

        while q:

            # 1. 记录当前这一层有多少个节点
            level_size = len(q) 

            # 2. 连续弹出 level_size 次,确保只处理当前层
            for i in range(level_size):
                node = q.popleft()  # 弹出当前节点
                if i == level_size - 1:  # 如果是最后一个节点
                    res.append(node.val)

                # 加入当前节点的左右节点
                if node.left:
                    q.append(node.left)
                if node.right:
                    q.append(node.right)

        return res

递归 深度优先

递归的同时记录深度,根-右-左

时间复杂度O(N)

同样需要走遍每个节点。虽然我们只取每层第一个看到的,但为了确认没有更深的节点,程序必须遍历完整棵树。
空间复杂度O(H)

H 是树的最大高度。这是由递归产生的系统栈深度决定的。

特点:

如果树是平衡的,H=log⁡NH = \log NH=logN,此时 DFS 比 BFS 节省很多内存。

如果树退化成一根直线(链表),H=NH = NH=N,此时两者空间开销差不多。

相关推荐
:-)2 小时前
算法-归并排序
java·开发语言·数据结构·算法·排序算法
Jerry6 小时前
LeetCode 101. 对称二叉树
算法
可编程芯片开发7 小时前
基于MPPT最大功率跟踪的离网光伏发电系统Simulink建模与仿真
算法
AI科技星7 小时前
线性算子不是空间映射函数,是全域双螺旋场之间拉伸、旋转、耦合、坍缩的跨空间标准化变换载体《全域数学vs传统数学:人类文明进阶200讲》第80讲
线性代数·算法·矩阵·数据挖掘·回归·乖乖数学·全域数学
米罗篮7 小时前
矩阵快速幂 (Exponentiation By Squaring Applied To Matrices)
c++·线性代数·算法·矩阵
dream_home84077 小时前
图像算法模型NPU适配与算法服务实战指南
人工智能·python·算法·npu 图像服务
大鱼>8 小时前
多宠物家庭智能管理平台:云端架构与多设备协同实战
python·算法·iot·宠物
To_OC9 小时前
LC 22 括号生成:刷完这道题,我终于搞懂回溯剪枝了
javascript·算法·leetcode
To_OC9 小时前
LC 39 组合总和:回溯入门必刷题,我踩过的两个坑都在这了
javascript·算法·leetcode
数字杂技师9 小时前
每条推荐都很准,为什么我还是越刷越无聊?
算法