Find Mode in Binary Search Tree【找到BST树中出现最多的元素】

LeetCode --- 501. Find Mode in Binary Search Tree 解题报告 Given a binary search tree (BST) with duplicates, find all themode(s)(the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a node contain... 阅读详情

PROBLEM:


Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.

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.

For example:
Given BST [1,null,2,2],

   1
    \
     2
    /
   2

return [2].

Note: If a tree has more than one mode, you can return them in any order.

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

SOLVE:

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> findMode(TreeNode* r) {
      int mfq/*max freq*/, pre/*previous val*/, cnt/*duplicates count*/;
      vector<int> modes;
      getMaxFreq(r, mfq=0, pre, cnt=0); // in-order traversal to get max frequency
      getMode(r, mfq, pre, cnt=0, modes);      // in-order traversal to get all modes
      return modes;
    }
    void getMaxFreq(TreeNode* r, int& mfq, int& pre, int& cnt) {
      if (!r) return;
      getMaxFreq(r->left, mfq, pre, cnt);

      mfq=max(mfq,cnt)
      cnt*=(r->val==pre);
      pre=r->val;

      getMaxFreq(r->right, mfq, pre, ++cnt);
    }
    void getMode(TreeNode* r, const int mfq, int& pre, int& cnt, vector<int>& modes) {
      if (!r) return;
      getMode(r->left, mfq, pre, cnt, modes);
      if (mfq == ++(cnt*=(r->val==pre))) modes.push_back(r->val);
      getMode(r->right, mfq, pre=r->val, cnt, modes);
    }
};

思路:如果是在一个排好序的数组中查找其实很容易,但是题目要求不能使用extra内存,所以就要在树中按从小到大的顺序遍历:方法就是指针先指到最左的一个元素然后遍历右子树(如果存在的话,否则退到上一层)。函数需要储存上一个值,相同值的个数(其实之后把他当成数组遍历就好了)。题解中第一个函数是题目给定的,getMaxFreq()函数找出出现最多的次数mfq,getMode()找出出现次数为mfq的元素。

解法中 getMaxFreq(r->left, mfq, pre, cnt) 的作用都是移动到当前子树中的最左子节点, getMaxFreq(r->right, ***) 开始按顺序遍历。

注意变量 mfq,pre,cnt的初始化。

【AIGC】大模型面试高频考点07-注意力(Attention)篇 AIGC面试高频考点 阅读详情

相关推荐

CPU系统级验证——测试激励——imperas公司riscvOVPsimPlus文件分析

本分析重点关注该repo向量扩展部分。 1. repo简介 该repo是指令集验证的仿真环境包括,大部分是指令集的测试用例,也包含了一些模拟器,如riscvOVPsimPlus。 主要介绍的是riscvOVPsimPlus指令集模拟器,riscvOVPsimPlus(下面统称ISS)是imperas公司在riscvOVPsim基础上扩充了向量扩展的指令集模拟器,该repo于今年9月份部分开源 什么叫部分开源呢? 首先该repo必须在imperas官网注册下载,而且必须是企业用户(免费邮箱人家瞧不上.

知识,既贵,又便宜。 4459

LeetCode 501. Find Mode in Binary Search Tree

给定具有重复项的二叉搜索树 (BST) 的根,返回其中的所有模式(即最常出现的元素)。

m0_54644067的博客 516

GD32F4x芯片加密实战:从读保护到安全启动全解析

本文详细解析了GD32F4x芯片加密的实战操作,从读保护功能到安全启动全流程。通过具体代码示例和应用场景分析,帮助开发者有效防止固件被盗用,提升工业控制、智能门锁等场景下的数据安全性。重点介绍了读保护功能的底层机制、配置步骤及常见问题解决方案。

weixin_42629671的博客 207

LeetCode|501. Find Mode in Binary Search Tree

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

iLOVEJohnny的博客 633

自举电容的工作原理-3句话总结

1、一道面试题 照例,先抛出来一道面试题:“Buck电路的SW引脚通常会放置一颗小电容,这颗电容有什么用?”。这个问题问得比较细,非常考验被面试者的硬件基本功。 2、似懂非懂的答案 有小伙伴可能不太清楚这颗电容的作用,回答不上来。也有小伙伴脱口而出:自举电容,用来做升压的。但后面好像说不出来具体逻辑。 没具体了解过,答不上来,也没啥可惜的。但是了解过一点,但又似懂非懂的这种,给出的答案只是轻轻点水或者千篇一律,那无疑是错过了一个加分项。 3、异步Buck的自举环路组成 既然是针对Buck电路讲自举电容,前面

ltqdxl的博客 3万+

华为eNSP实战:手把手教你配置DHCP全局地址池(含AP固定IP分配)

本文通过华为eNSP模拟器,详细演示了如何配置DHCP全局地址池,为不同业务VLAN动态分配IP地址,并重点讲解了如何通过MAC地址绑定为接入点(AP)分配固定IP。文章涵盖了从拓扑设计、基础网络搭建到地址池精细配置、验证测试及常见故障排查的全流程,是网络工程师掌握企业级DHCP部署与AP管理的实用指南。

weixin_29235923的博客 600

132.Find Mode in Binary Search Tree(二分搜索树的众数)

题目: Given a binary search tree (BST) with duplicates, find all themode(s)(the most frequently occurred element) in the given BST. 给定具有重复项的二叉搜索树(BST),找到给定BST中的所有众数(最频繁出现的元素)。 Assume a BST is defin...

weixin_30633949的博客 77

U型槽微带贴片天线:从理论公式到带宽扩展实战

本文深入探讨了U型槽微带贴片天线的设计与带宽扩展实战。针对传统微带天线带宽窄的痛点,详细解析了通过引入U型槽形成双谐振点以拓宽带宽的原理,并提供了从MATLAB理论计算、ANSYS HFSS仿真建模到参数优化的一站式工程指南。文章还分享了多种带宽扩展组合技巧及仿真与实测避坑经验,助力射频工程师设计出高性能的宽带微带天线。

weixin_29168153的博客 447

Find Mode in Binary Search Tree

Find Mode in Binary Search Tree Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as fol

xiaohuihui52309的专栏 243

Win11下USB-Blaster驱动安装全攻略:Quartus用户必看(附常见问题解决)

本文详细介绍了在Windows 11系统下为Intel FPGA开发工具Quartus安装USB-Blaster驱动的完整流程与常见问题解决方案。针对Win11更严格的驱动签名验证机制,提供了从标准安装步骤到高级故障排查(如禁用驱动强制签名、使用测试模式)的实用指南,帮助用户快速解决驱动安装失败问题,确保FPGA编程调试顺利进行。

weixin_29256771的博客 662

CANoe LIN一致性测试之干扰测试Test moudle_LIN Disturbance Block

注意:相邻两个显隐性不同的bit不允许干扰,例如我同时选择bit6和bit7,相邻两个同显隐性的bit允许干扰,例如当我选择bit3和bit4,项,这里我选择ID:为0x2F(PID:0x6F)的frame。需按照具体测试规范实施干扰项,帧头和数据段都可以实现干扰。最近发现一个干扰测试模块,下面是一些具体使用方法。选择干扰项:PID的奇偶校验位(一致性测试干扰测试之手动测试。一个待测试frameD。

yuanyikangkang的博客 3410

501.Find Mode in Binary Search Tree(Tree-Easy)

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.

Jack-Cui 4665

Python 爬虫实战:医学临床指南爬取(含 PDF 解析与结构化存储)

在当今数字化时代,医学临床指南作为医生进行科学诊疗的重要参考资料,包含大量经过临床验证的诊疗路径和建议。这些指南通常发布在权威医学网站上,数量庞大且更新频繁。如何自动化地抓取并存储这些指南,成为医疗数据分析、医学研究以及医疗 AI 模型训练等工作的关键第一步。本文将系统讲解如何利用 Python 爬虫技术从权威医学网站爬取临床指南内容,并实现 PDF 解析与结构化存储。

u014481728的博客 449

501. Find Mode in Binary Search Tree

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a node c

zshouyi的博客 1701

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode-501. Find Mode in Binary Search Tree (JAVA)出现次数最多的元素

LeetCode-501. Find Mode in Binary Search Tree (JAVA)出现次数最多的元素

mine_song的博客 1814

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

501. Find Mode in Binary Search Tree [JavaScript]

一、题目   Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST.   Assume a BST is defined as follows: The left subtree of a node...

descire 210

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

leetcode 501.Find Mode in Binary Search Tree

Given a binary search tree (BST) with duplicates, find all the mode(s) (the most frequently occurred element) in the given BST. Assume a BST is defined as follows: The left subtree of a node contains ...

luoshaohong的博客 161
上一篇: Next Greater Element I【第一个数组中数字在第二个数组中找次大值】
下一篇: 【Python】琐碎知识点整理记录
Sim0Hayha
博客等级 码龄10年 9粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值