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,此时两者空间开销差不多。

相关推荐
wayz116 分钟前
Day 6 编程实战:决策树与过拟合分析
算法·决策树·机器学习
ฅ ฅBonnie14 分钟前
vLLM 推理后端简介
人工智能·python·算法
贾斯汀玛尔斯15 分钟前
每天学一个算法--堆排序(Heap Sort)
数据结构·算法
programhelp_16 分钟前
ZipRecruiter CodeSignal OA 2026|最新真题分享 + 速通攻略
数据结构·经验分享·算法·面试
liuyao_xianhui36 分钟前
map和set_C++
java·开发语言·数据结构·c++·算法·宽度优先
墨^O^43 分钟前
C++ Memory Order 完全指南:从 relaxed 到 seq_cst,深入理解无锁编程与 happens-before
linux·开发语言·c++·笔记·学习·算法·缓存
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 51. N 皇后 | C++ 回溯算法&状态数组
c++·算法·leetcode
脱氧核糖核酸__1 小时前
LeetCode热题100——41.缺失的第一个正数(题解+答案+要点)
数据结构·c++·算法·leetcode·哈希算法
脱氧核糖核酸__1 小时前
LeetCode热题100——73.矩阵置零(题目+题解+答案)
c++·算法·leetcode·矩阵
Mr_Xuhhh1 小时前
深入理解单链表的递归反转:从原理到实现
算法·leetcode·职场和发展