LeetCode|501. Find Mode in Binary Search Tree

题记

时隔若干年后,我又开始刷leetcode了,看看这次会刷多少。

题目

Given the root of a binary search tree (BST) with duplicates, return all the mode(s) (i.e., the most frequently occurred element) in it.

If the tree has more than one mode, return them in any order.

Assume a BST is defined as follows:
The left subtree of a node contains only nodes with keys less than or equal to the node’s key.
The right subtree of a node contains only nodes with keys greater than or equal to the node’s key.
Both the left and right subtrees must also be binary search trees.

Example 1:

Input: root = [1,null,2,2]
Output: [2]

Example 2:

Input: root = [0]
Output: [0]

Constraints:

  • The number of nodes in the tree is in the range [1, 104].
  • -105 <= Node.val <= 105

Follow up: Could you do that without using any extra space? (Assume that the implicit stack space incurred due to recursion does not count).

思路

第一个想到的思路比较简单,同时也耗时耗空间。
即直接遍历一遍二叉树,然后把每个节点的root->val当作map的索引,出现次数则为map的second值。
遍历之后扫描一遍map中的second值,记录最大的值待用。
再扫描一遍map值,等于最大second的map元素的first值压入vector作为输出。

代码

/*** 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:void scanTree(TreeNode* root, map<int, int>& m) {if (root == NULL)return;if (m.find(root->val) != m.end()) {m[root->val]++;} else {m.insert({root->val, 1});}scanTree(root->left, m);scanTree(root->right, m);return;}vector<int> findMode(TreeNode* root) {vector<int> res;if (root == NULL)return res;if (root->left == NULL && root->right == NULL){res.push_back(root->val);return res;}map<int, int> m;scanTree(root, m);int max = 0;for (map<int, int>::iterator iter=m.begin(); iter!=m.end(); iter++) {if (iter->second > max) {max = iter->second;}}for (map<int, int>::iterator iter=m.begin(); iter!=m.end(); iter++) {if (iter->second == max) {res.push_back(iter->first);}}return res;}
};

时间效率和空间占用都有很多可优化的空间。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/803582.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

apex0.1版本安装踩坑指南

踩了无数坑&#xff0c;发现只需要三行命令就可以成功安装apex0.1. 由于pip命令下只能找到0.9的版本&#xff0c;所以需要git clone的方式安装。 1. ​ git clone https://www.github.com/nvidia/apex 这个命令的意思是下载apex到本地。注意&#xff0c;这里需要稳定的环境…

负荷预测 | Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于TCN-GRU-Attention单输入单输出时间序列多步预测&#xff1b; 2.单变量时间序列数据集&#xff0c;采用前12个时刻预测未来96个时刻的数据&#xff1b; 3.excel数据方便替换&#xff0c;运行环境matlab20…

[法规规划|数据概念]数据要素市场三月速递

“ 代表关注&#xff0c;市场活跃&#xff0c;发展迅速” 01—听听两会代表怎么说 在2024年的全国两会期间&#xff0c;数据要素作为新型的生产要素受到广泛关注&#xff0c;众多代表围绕数据要素市场化、立法、安全监管、人才培养及基础设施建设等方面&#xff0c;积极建言献策…

P8602 [蓝桥杯 2013 省 A] 大臣的旅费【树的直径】

P8602 [蓝桥杯 2013 省 A] 大臣的旅费 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<iostream> #include <algorithm> #include <vector> using namespace std; #define int long long const int N5e5100; int n; int res0; typedef pair<int,…

植物大战僵尸Python版,附带源码注解

目录 一、实现功能 二、安装环境要求 三、如何开始游戏 四、怎么玩 五、演示 六、部分源码注释 6.1main.py 6.2map.py 6.3Menubar.py 七、自定义 7.1plant.json 7.2zombie.json 一、实现功能 实施植物&#xff1a;向日葵、豌豆射手、壁桃、雪豆射手、樱桃炸弹、三…

蓝桥杯——最长递增

题目 在数列 a1, a2,,an 中&#xff0c;如果 a¡ < ai1 < ai2 <<aj&#xff0c;则称 ai 至 a,为一段递增序列&#xff0c;长度为 j-i 1。 定一个数列&#xff0c;请问数列中最长的递增序列有多长。 输入描述 输入的第一行包含一个整数 n。 第二行包含 几 个整…

【前端】学习路线

1、基础 1.1 HTML 菜鸟教程-主页&#xff1a;https://www.runoob.com/ 可以学习&#xff1a;HTML、CSS、Bootstrap等 1.2 CSS 《通用 CSS 笔记、建议与指导》 1.3 JavaScript 1&#xff09;入门&#xff1a;JavaScript 的基本语法 2&#xff09;进阶&#xff1a;现代 …

蓝桥杯中的DFS算法

前言 和上一篇文章一样&#xff0c;这篇文章是介绍蓝桥杯中的第二种暴力算法就是DFS算法&#xff0c;在蓝桥杯中非常常用。 简单介绍 DFS算法中文名就是深度优先算法&#xff0c;在这里就不详细介绍这个算法了&#xff0c;可以自行搜索&#xff0c;网上有很多&#xff0c;或…

前端小白的学习之路(Vue2 二)

提示&#xff1a;学习vue2的第二天&#xff0c;笔记记录&#xff1a;自定义指令&#xff0c;事件修饰符&#xff0c;属性计算&#xff0c;属性监听&#xff0c;属性过滤 目录 一、自定义指令 1.全局注册 2.局部注册 二、事件修饰符 1.常用事件修饰符 1&#xff09;事件相…

Http客户端Feign

RestTemplate存在的问题 这是一段使用RestTemplate来发起远程调用的代码&#xff0c;存在以下问题 1&#xff0c;代码可读性差&#xff0c;编程体验不统一&#xff08;其实还好&#xff09; 2&#xff0c;复杂的url难以维护&#xff0c;修改起来十分麻烦 3&#xff0c;总结…

4.9作业

完善对话框&#xff0c;点击登录对话框&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示“登录成功“&#xff0c;提供一个Ok 按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#xf…

python pygame库的略学

文章目录 概述1. pygame的初始化和退出2. 创建游戏窗口&#xff08;1&#xff09;set_mode()&#xff08;2&#xff09;set_capyion()&#xff08;3&#xff09;update() 3. 游戏循坏与游戏时钟4. 图形和文本绘制&#xff08;1&#xff09;图形绘制&#xff08;2&#xff09;文…

thinkphp5关联预载入with指定字段属性查询

一、thinkphp5.0 如果要指定属性查询&#xff0c;可以使用&#xff1a; $list User::field(id,name)->with([profile>function($query){$query->field(email,phone);}])->select([1,2,3]); foreach($list as $user){// 获取用户关联的profile模型数据dump($user…

MSTP/RSTP的保护功能

目录 原理概述 实验目的 实验内容 实验拓扑 1.配置RSTP/MSTP 2.配置BPDU保护 3.配置根保护 4.配置环路保护 5.配置TC-BPDU保护 原理概述 在RSTP或MSTP交换网络中&#xff0c;为了防止恶意攻击或临时环路的产生&#xff0c;可配置保护功能来增强网络的健壮性和安全性。…

openstack中windows虚拟机时间显示异常问题处理

文章目录 一、问题描述二、元数据信息总结 一、问题描述 openstack创建出windows虚拟机的时候&#xff0c;发现时间和当前时间相差8小时&#xff0c;用起来很难受。 参考&#xff1a;https://www.cnblogs.com/hraa0101/p/11365238.html 二、元数据信息 通过设置镜像的元数据…

pytest教程-24-多重断言插件-pytest-assume

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest指定用例执行顺序插件pytest-ordering,本小节我们讲解一下pytest多重断言插件-pytest-assume。 在自动化测试过程中&#xff0c;我们执行完用例之后&#xff0c;需要验证脚本执行的结果…

如何在 iOS 项目中集成 MiniApp SDK,快速构建智能小程序?

本文介绍如何在 iOS 项目中&#xff0c;集成 MiniApp SDK&#xff0c;使之能够构建智能生活小程序&#xff0c;运行在你的 IoT App 上。 准备工作 在集成 MiniApp SDK 之前&#xff0c;您需要在 涂鸦 IoT 开发平台 上&#xff1a; 注册开发者账号、创建产品、创建功能点等。…

IO进程线程Day8

让2个终端之间互相聊天&#xff0c;使用消息队列去实现 #include <myhead.h> //使用消息队列实现两个进程的相互聊天 #define ERR_MSG(msg) do{fprintf(stderr,"__%d__",__LINE__);\perror(msg);\}while(0) int msgid; typedef struct{long mtype;char text…

Quasi-Direct Drive for Low-Cost Compliant Robotic Manipulation翻译

文章目录 标题摘要I. 引言A. 问题定义和用户需求B. 定义有用的机器人操控器C. 定义有用的带宽和载荷D. 低成本设计约束 II. 相关工作A. 机器人系统中的柔顺性B. 人类载荷下的力控制机械臂C. 现有的低成本机械臂D. 驱动方案 III. 低成本柔顺操控的设计A. 准直驱驱动B. 差分齿带传…

spikingjelly学习-训练网络

【MNIST数据集包含若干尺寸为28*28的8位灰度图像&#xff0c;总共有0~9共10个类别。以MNIST的分类为例&#xff0c;一个简单的单层ANN网络如下 我们也可以用完全类似结构的SNN来进行分类任务。就这个网络而言&#xff0c;只需要先去掉所有的激活函数&#xff0c;再将尖峰神经元…