当前位置: 首页 > article >正文

[M二叉树] lc199. 二叉树的右视图(dfs+自顶向下+好题)

文章目录

    • 1. 题目来源
    • 2. 题目解析

1. 题目来源

链接:199. 二叉树的右视图

题单:

    1. 链表、二叉树与一般树(前后指针/快慢指针/DFS/BFS/直径/LCA)
    • §2.2 自顶向下 DFS
    • §2.13 BFS

2. 题目解析

思路:

  • 换做是 bfs 应该非常好理解,只需要记录每一层的最后一个树节点即可。
  • dfs 的话,需要注意下搜索顺序,因为是右视图,所以需要优先从右侧开始搜起。
  • 记录一个答案数组。当树的高度和答案数组中的元素一致时,说明当前节点还没有被其他节点所挡住,记录该节点值到答案数组,继续向右儿子方向继续搜索,同时高度加 1。

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( n ) O(n) O(n)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> res;
    void dfs(TreeNode* root, int hi) {
        if (!root) return ;
        if (hi == res.size()) res.push_back(root->val);

        dfs(root->right, hi + 1);
        dfs(root->left, hi + 1);
        return ;
    }
    vector<int> rightSideView(TreeNode* root) {
        dfs(root, 0);
        return res;
    }
};

http://www.kler.cn/a/287463.html

相关文章:

  • arkUI:网格布局(Grid)
  • Java putIfAbsent() 详解
  • Solana应用开发常见技术栈
  • android framework ams/wms常见系统日志(main\system\events\crash,protoLog使用)
  • Redis知识分享(三)
  • 如何轻松导出所有 WordPress URL 为纯文本格式
  • 使用 SASS 编写高效 CSS
  • CentOS 7安装和配置 NFS
  • [Doc][px4][ros2][gazebo][yolov8]PX4-ROS2-Gazebo-YOLOv8
  • 数据仓库系列10:如何处理维度表中的变化类型?
  • Shell 脚本入门指南
  • 深度学习100问24:什么是语言模型
  • 基于混沌麻雀搜索算法的光伏MPPT控制MATLAB仿真
  • 文章_Linux运维_在非docker环境中编译安装docker
  • java 二级列表 stream流实现
  • 力扣经典题目之->另一颗树的子树(subRoot是否是root的子树)
  • 【STM32 Blue Pill编程】-ADC数据采样(轮询、中断和DMA模式)
  • Linux使用openssl生成ssl证书
  • 游戏设计师:创造虚拟世界的艺术家
  • 江协科技stm32————10-1 I2C通信协议
  • 【C语言必学知识点六】自定义类型——结构体
  • 芯旺微,车规级32位MCU KF32A芯片简介
  • 内存管理篇-14kmalloc机制实现分析
  • SpringBoot整合积木报表
  • 14 大模型微调-KitTrain
  • OpenGL/GLUT实践:绘制旋转的立方体与雪人世界——添加光照与SOIL方式添加纹理(电子科技大学信软图形与动画Ⅱ实验)