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

相关推荐
天天喝旺仔5 分钟前
Git 内部原理深度解析:从 blob/tree/commit 对象到 packfile 与垃圾回收
数据结构·数据库·git·算法·哈希
AIGCmagic社区7 分钟前
KITTI AbsRel从6.5压到5.4,Marigold V2用一张32GB卡把编辑DiT收成单步深度估计
人工智能·算法·aigc·ai多模态
青少儿编程课堂8 分钟前
多源最短路与最小环(Floyd 算法图论解析)
c++·python·算法·bfs·信息学竞赛
6Hzlia16 分钟前
【Classic 150 刷题计划】 LeetCode 228. 汇总区间 | C++ 锚点游标与断点检测法
c++·算法·leetcode
Edward The Bunny31 分钟前
Leetcode Hot 100
数据结构·算法
hans汉斯34 分钟前
数据挖掘|基于BP神经网络的少数民族村寨文化型旅游体验产品潜在游客挖掘
深度学习·神经网络·算法·yolo·软件工程·bp·汉斯出版社
v_348360876210 小时前
Android native端 堆栈打印
android·算法
residual_fan10 小时前
【学术论文】航空发动机故障诊断智能体:基于持续对比强化学习的动态优化方法
人工智能·算法·数据挖掘·数据分析
GreenTea11 小时前
OpenAI Agents API 上手实测:一次调用把整个 agent loop 甩给 OpenAI
前端·后端·算法
深圳满意度咨询12 小时前
医院满意度数字化测评系统:从数据采集到智能决策的技术实践
算法