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

欧美做暖网站90设计素材网官网

欧美做暖网站,90设计素材网官网,新月直播,成都企业网站公司前言 二叉搜索树操作#xff0c;继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树#xff08;BST#xff09;的根节点 root #xff0c;找出并返回 BST 中的所有 众数#xff08;即#xff0c;出现频率最高的元素#xff09;…前言 二叉搜索树操作继续。 记录 五十六【501.二叉搜索树中的众数】 一、题目阅读 给你一个含重复值的二叉搜索树BST的根节点 root 找出并返回 BST 中的所有 众数即出现频率最高的元素。 如果树中有不止一个众数可以按 任意顺序 返回。 假定 BST 满足如下定义 结点左子树中所含节点的值 小于等于 当前节点的值 结点右子树中所含节点的值 大于等于 当前节点的值 左子树和右子树都是二叉搜索树 示例 1 输入root [1,null,2,2] 输出[2]示例 2 输入root [0] 输出[0]提示 树中节点的数目在范围 [1, 10^4] 内 -10^5 Node.val 10^5进阶你可以不使用额外的空间吗假设由递归产生的隐式调用栈的开销不被计算在内 二、尝试实现 依然使用二叉搜索树中序遍历得到有序递增序列的特性。 思路【直白想法】 借助数组通过中序遍历将二叉搜索树中的值取出来。再在数组中操作。在数组中使用双指针循环判断一个值出现的次数再和最大次数记录比较 如果比最大出现次数的记录小那么不操作如果相等那么加入到返回值数组中如果比最大出现次数的记录大判断返回值数组中是否为空先清空后加入。 代码实现【借助数组额外开辟空间】 /*** 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 traversal(TreeNode* cur,vectorint nums){if(!cur) return;traversal(cur-left,nums);nums.push_back(cur-val);traversal(cur-right,nums);return;}vectorint findMode(TreeNode* root) {vectorint result;vectorint nums;traversal(root,nums);int max 0;for(int i 0;i nums.size();){int ji1;int count 1;for(;j nums.size();j){if(nums[j] nums[i]){count;}else{break;}}if(count max){if(!result.empty()) result.clear();result.push_back(nums[i]);max count;}else if(count max){result.push_back(nums[i]);}i j;}return result;} };三、参考学习 参考学习链接 学习目标如何在树中边遍历边确定众数肯定还是双指针。尝试一下有bug class Solution { public:int maxcount 0;//记录最大次数int count 1;//计数。TreeNode* pre nullptr;void traversal(TreeNode* cur,vectorint nums){if(!cur) return;traversal(cur-left,nums);if(pre pre-val cur-val){count;}else if(pre pre-val ! cur-val){if(count maxcount){if(!nums.empty()) nums.clear();nums.push_back(pre-val);maxcount count;//最大值更新}else if(count maxcount){nums.push_back(pre-val);}count 1;//重新计数新的值pre cur;//此处才更新pre}else if(!pre){pre cur;//初始时避免pre空}traversal(cur-right,nums);return;}vectorint findMode(TreeNode* root) {vectorint result;traversal(root,result);//处理最后} };使用时候如何结束时也能操作元素呢在cur-right后还有处理逻辑。 学习内容 双指针法解决先说误区 从借助数组的代码实现中发现遍历数组时使用了i,j相当于i不动j移动统计这个元素出现次数。如果nums[j] ! nums[i]说明nums[i]出现次数统计完毕。接下来比较count和max。没有想到可以相邻元素比较如果相等count。count加一次和max比较一次不相等时前面的count已经放到结果里。每一次都要进行count和max比较。尝试双指针错误在于认为pre-val和cur-val不相等时才更新pre才比较count和max。正确pre紧跟cur把count和max的比较放到if外面这样count更新max更新。总结错误——元素比较不相等时统计完一个元素次数后放入结果正确——每次元素比较即使相等也要判断count和max。 双指针代码修正 class Solution { public:int maxcount 0;//记录最大次数int count 1;//计数。TreeNode* pre nullptr;void traversal(TreeNode* cur,vectorint nums){if(!cur) return;traversal(cur-left,nums);if(pre pre-val cur-val){count;}else if(pre pre-val ! cur-val ){count 1;//重新计数新的值}pre cur;//初始时避免pre空if(count maxcount){if(!nums.empty()) nums.clear();nums.push_back(pre-val);maxcount count;//最大值更新}else if(count maxcount){nums.push_back(pre-val);}traversal(cur-right,nums);return;}vectorint findMode(TreeNode* root) {vectorint result;traversal(root,result);return result;} };迭代法中序迭代模版加中间节点处理逻辑。普通二叉树如何求众数 普通二叉树数值没有任何关系那么双指针法不成立。不过借助数组方法依然可以用。借助数组遍历取出所有值放到vector里面之后sort从小到大排个序遍历数组参考借助数组思路用unordered_map统计元素出现次数再把map转换成vector再自定义比较函数带入sort中得到从大到小的排序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 traversal(TreeNode* cur,unordered_mapint,int nums){if(!cur) return;nums[cur-val];traversal(cur-left);traversal(cur-right);}bool cmp(const pairint,int a,const pairint,int b) const{return a.second b.second;}vectorint findMode(TreeNode* root) {vectorint result;unordered_mapint,int map;traversal(root,map);vectorpairint,int vec(map.begin(),map.end());sort(vec.begin(),vec.end(),cmp);result.push_back(vec[0].first);for(int i 0;i vec.size();i){if(vec[i].second vec[0].second) result.push_back(vec[i].first);}return result;} };总结 【501.二叉搜索树中的众数】和【求普通二叉树的众数】 欢迎指正转载标明出处
http://www.hkea.cn/news/14531183/

相关文章:

  • 深圳做微信网站制作注册域名的服务商平台
  • 网站开发与设计公司大数据营销的特征有哪些
  • 爱空间网站模板关于网站建设实验报告
  • 活泼的网站网站设计优缺点分析
  • 网站系统设计方案个人建网站首选什么域名好
  • 企业微网站哪家好在线模板制作
  • 做网站ps能用美图秀秀么什么叫电商怎么做电商
  • 新城镇建设官方网站平面设计师灵感网站
  • 网站开发怎么用自己的电脑开发区二手房房价最新信息
  • 简约 个人网站杭州市建设信息网
  • asp学校网站源码淄博学校网站建设方案
  • 微页制作平台网站建设闽清网站建设
  • 网站建设项目实践报告wordpress关闭评论框
  • 免费生成网页的网站自媒体人15种赚钱方法
  • 济南企业建站怎么样基于html的网站开发
  • 东莞网站空间武威 网站建设
  • 大庆百度做网站多少钱化妆品首页设计
  • 网站后台信息怎么更新营销网站建设是什么意思
  • ICP备案网站服务内容如何建企业仢网站
  • 南昌冶金建设有限公司网站建设网站常见问题
  • 深圳建设一个网站制作公司2345小游戏
  • 哪里有网站开发平台免费设计房屋的软件
  • 网上做网站 干对缝儿生意网站建设的用处
  • 微帮网免费发布信息网优化关键词推广
  • vs平台做网站百度搜索网址大全
  • 网站搭建软件工具福州高端网站定制
  • 浑南区建设局网站新闻投稿
  • 网站开发实战教程信息技术网站建设专业
  • 献县网站建设价格什么网站做h5好
  • 网站专题模板南宁网站建设团队