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

199. 二叉树的右视图【 力扣(LeetCode) 】

文章目录

  • 零、原题链接
  • 一、题目描述
  • 二、测试用例
  • 三、解题思路
  • 四、参考代码

零、原题链接


199. 二叉树的右视图

一、题目描述

给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

二、测试用例

示例 1:

在这里插入图片描述

输入: [1,2,3,null,5,null,4]
输出: [1,3,4]

示例 2:

输入: [1,null,3]
输出: [1,3]

示例 3:

输入: []
输出: []

提示:

二叉树的节点个数的范围是 [0,100]
-100 <= Node.val <= 100 

三、解题思路

  1. 基本思路:
      基本就是暴力了,深度搜索或者广度搜索都可以,不过广度搜索好理解一点;
  2. 具体思路:
    • 使用队列进行广度搜索
      • 弹出队首元素,如果左右子树非空,则将左右子树压入队尾;同时记录下一层节点个数;
      • 判断当前层是否结束,结束则将弹出的队首元素压入答案中;
    • 返回答案。

四、参考代码

时间复杂度: O ( n ) \Omicron(n) O(n)【n 是节点数】
空间复杂度: O ( n ) \Omicron(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> rightSideView(TreeNode* root) {
        if (!root)
            return {};
        vector<int> ans;
        queue<TreeNode*> bfs;
        int cur, next = 0;

        bfs.push(root);
        cur = 1;
        while (bfs.size()) {
            TreeNode* t = bfs.front();
            bfs.pop();
            cur--;

            if (t->left) {
                bfs.push(t->left);
                next++;
            }
            if (t->right) {
                bfs.push(t->right);
                next++;
            }

            if (cur == 0) {
                cur = next;
                next = 0;
                ans.push_back(t->val);
            }
        }

        return ans;
    }
};

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

相关文章:

  • Kafka简单实践
  • 6.584-Lab1:MapReduce
  • 9.C++面向对象6(实现一个较为完善的日期类)
  • 小版本大不同 | Navicat 17 新增 TiDB 功能
  • Linux驱动开发第2步_“物理内存”和“虚拟内存”的映射
  • # ubuntu 安装的pycharm不能输入中文的解决方法
  • 深挖C++赋值
  • 在Ubuntu22.04上源码构建ROS noetic环境
  • Harmony错题本--@Preview标注上依然无法预览
  • vim教程
  • 全媒体数字化转型浪潮下半场,有效流量创新业务是转型成功与否的最好证明
  • Brave127编译指南 Windows篇:获取源码(六)
  • 2024.11.16上午Linux上课笔记
  • C++泛型编程-函数模板、类模板
  • 使用Web Animations API实现复杂的网页动画效果
  • k8clone二进制工具迁移k8s中的无状态应用
  • 【汇编】c++游戏开发
  • Kubernetes 集群中防火墙配置的挑战及替代防护策略
  • 计算机网络基础(3)_应用层自定义协议与序列化
  • SQL面试题——抖音SQL面试题 主播播出时长
  • 【数据结构与算法】查找
  • Sping全面复习
  • Dijkstra 算法的实现方案
  • 蓝队基础之网络七层杀伤链
  • Linux解决普通用户无法使用sudo指令的问题
  • C++ 常函数、常对象