LeetCode 919. 完全二叉树插入器(层序遍历队列)

1. 题目

完全二叉树是每一层(除最后一层外)都是完全填充(即,结点数达到最大)的,并且所有的结点都尽可能地集中在左侧。

设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作:

  • CBTInserter(TreeNode root) 使用头结点为 root 的给定树初始化该数据结构;
  • CBTInserter.insert(int v)TreeNode 插入到存在值为 node.val = v 的树中以使其保持完全二叉树的状态,并返回插入的 TreeNode父结点的值;
  • CBTInserter.get_root() 将返回树的头结点。
示例 1:
输入:inputs = ["CBTInserter","insert","get_root"], 
inputs = [[[1]],[2],[]]
输出:[null,1,[1,2]]示例 2:
输入:inputs = ["CBTInserter","insert","insert","get_root"], 
inputs = [[[1,2,3,4,5,6]],[7],[8],[]]
输出:[null,3,4,[1,2,3,4,5,6,7,8]]提示:
最初给定的树是完全二叉树,且包含 11000 个结点。
每个测试用例最多调用 CBTInserter.insert  操作 10000 次。
给定结点或插入结点的每个值都在 05000 之间。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/complete-binary-tree-inserter
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 先按层序将树的节点放进数组,并将节点之间的连接关系拆开
  • 用一个队列存储完全二叉树中的节点(其子节点没插满的节点)
class CBTInserter {TreeNode *r = NULL;vector<TreeNode*> insertNode;//存储原始树的各个节点int i, fatherVal;queue<TreeNode*> upperLv;//存储完全二叉树子节点没插满的节点TreeNode *tp;
public:CBTInserter(TreeNode* root) {lvOrder(root);//树节点层序添加进数组,并拆散,待用if(r == NULL){r = insertNode.front();insertNode.erase(insertNode.begin());upperLv.push(r);}while(!insertNode.empty()){tp = insertNode.front();insertNode.erase(insertNode.begin());upperLv.push(tp);//tp的子节点没有满if(upperLv.front()->left == NULL)upperLv.front()->left = tp;else//左边接上了,接在右边{upperLv.front()->right = tp;upperLv.pop();//左右都接好了,上层的可以删了}}}int insert(int v) {fatherVal = upperLv.front()->val;tp = new TreeNode(v);if(upperLv.front()->left == NULL)upperLv.front()->left = tp;else//左边接上了,接在右边{upperLv.front()->right = tp;upperLv.pop();//左右都接好了,上层的可以删了}upperLv.push(tp);//tp的子节点没有满return fatherVal;}TreeNode* get_root() {return r;}void lvOrder(TreeNode *root){if(root == NULL)return;insertNode.clear();insertNode.push_back(root);for(i = 0; i < insertNode.size(); ++i){if(insertNode[i]->left)insertNode.push_back(insertNode[i]->left);if(insertNode[i]->right)insertNode.push_back(insertNode[i]->right);insertNode[i]->left = insertNode[i]->right = NULL;//拆散整棵树后面直接利用,节省内存}}
};

在这里插入图片描述

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

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

相关文章

开源开放 | 中文相对复杂词汇识别数据集RCWI-Dataset(CCKS2021)

OpenKG地址&#xff1a;http://openkg.cn/dataset/rcwi-dataset开放许可协议&#xff1a;CC BY-SA 4.0 &#xff08;署名相似共享&#xff09;贡献者&#xff1a;北京语言大学&#xff08;阙孟溪、张宇飞、于东&#xff09;1. 摘要中文领域的词汇复杂度评估资源较为匮乏&#x…

提升 NLP 实战技能的一点建议

作为最典型的 AI 领域之一&#xff0c;NLP 这些年也是越来越热门&#xff0c;基本上是各大厂必备了。随着 OpenAI 等技术的诞生、迁移学习等技术的成功应用&#xff0c;使得 NLP 技术在搜索、推荐、信息流、互联网金融、社交网络等领域不断发展壮大。与此同时&#xff0c;NLP 工…

深入FFM原理与实践

FM和FFM模型是最近几年提出的模型&#xff0c;凭借其在数据量比较大并且特征稀疏的情况下&#xff0c;仍然能够得到优秀的性能和效果的特性&#xff0c;屡次在各大公司举办的CTR预估比赛中获得不错的战绩。美团技术团队在搭建DSP的过程中&#xff0c;探索并使用了FM和FFM模型进…

LeetCode 993. 二叉树的堂兄弟节点(层序遍历)

文章目录1. 题目2. 解题2.1 层序遍历2.2 递归查找1. 题目 在二叉树中&#xff0c;根节点位于深度 0 处&#xff0c;每个深度为 k 的节点的子节点位于深度 k1 处。 如果二叉树的两个节点深度相同&#xff0c;但父节点不同&#xff0c;则它们是一对堂兄弟节点。 我们给出了具有…

论文浅尝 | IRW:基于知识图谱和关系推理的视觉叙事框架

笔记整理&#xff1a;孙悦&#xff0c;天津大学 链接&#xff1a;https://www.aaai.org/AAAI21Papers/AAAI-3382.XuC.pdf动机视觉叙事是生成一个短篇故事来描述有序图像流的任务。与视觉字幕不同&#xff0c;故事不仅包含事实描述&#xff0c;还包含未出现在图像中的想象概念。…

薅羊毛 Colab使用外部数据的7种方法!

文 | Coggle源 | Coggle数据科学Colab作为非常强大且优惠的计算平台&#xff0c;一直广受大家喜爱。可以随时随地使用&#xff0c;还有免费的GPU可以薅羊毛。那么如何在Colab中使用外部数据集&#xff0c;来完成竞赛呢&#xff0c;本文将给出几种常见的方法。方法1&#xff1a;…

高可用性系统在大众点评的实践与经验

背景 所谓高可用性指的是系统如何保证比较高的服务可用率&#xff0c;在出现故障时如何应对&#xff0c;包括及时发现、故障转移、尽快从故障中恢复等等。本文主要以点评的交易系统的演进为主来描述如何做到高可用&#xff0c;并结合了一些自己的经验。需要强调的是&#xff0c…

图灵奖大佬+谷歌团队,为通用人工智能背书!CV 任务也能用 LM 建模!

文 | ZenMoore编 | 小轶图灵奖大佬 Geoffrey Hinton 的团队和 Google Brain 团队近日发布新工作 Pix2seq&#xff0c;将 CV 经典任务 目标检测 转换为了语言模型的下游任务。这就很有意思了朋友们&#xff01;因为这是一个很一般化的范式&#xff01;也就是说&#xff0c;不光是…

论文浅尝 | 异构图 Transformer

笔记整理&#xff1a;许泽众&#xff0c;浙江大学博士在读论文链接&#xff1a;https://arxiv.org/abs/2003.01332本文主要提出一种处理异构图的方法&#xff0c;所谓异构图&#xff08;Heterogeneous graph&#xff09;是指在一个图中会出现不同类型的边和节点的图。早期对于图…

LeetCode 1145. 二叉树着色游戏(计算节点个数)

1. 题目 有两位极客玩家参与了一场「二叉树着色」的游戏。游戏中&#xff0c;给出二叉树的根节点 root&#xff0c;树上总共有 n 个节点&#xff0c;且 n 为奇数&#xff0c;其中每个节点上的值从 1 到 n 各不相同。 游戏从「一号」玩家开始&#xff08;「一号」玩家为红色&a…

常见的时间序列预测模型python实战汇总

最完整的时间序列分析和预测&#xff08;含实例及代码&#xff09;&#xff1a;https://mp.weixin.qq.com/s/D7v7tfSGnoAqJNvfqGpTQA 1 时间序列与时间序列分析 在生产和科学研究中&#xff0c;对某一个或者一组变量 x(t)x(t) ARIMA 模型对时间序列的要求是平稳型。因此&#x…

简单复读机LR如何成为推荐系统精排之锋?

文 | 水哥源 | 知乎saying1. 众所周知&#xff0c; 人类&#xff08;划掉&#xff09;推荐的本质是复读机2. 精排之锋&#xff0c;粗排之柔&#xff0c;召回之厚3. 在推荐里谈“过拟合”很容易给我们造成心理上的松懈&#xff0c;导致我们忽略环境&#xff0c;氛围等多种因素的…

从0到1构建美团压测工具

背景 美团内部的RPC服务大多构建在Thrift之上&#xff0c;在日常开发服务的过程中&#xff0c;需要针对这些服务进行压力测试&#xff08;以下简称压测&#xff09;来发现潜在问题。常用的方法有&#xff1a; 使用一些脚本语言如&#xff1a;Python、Ruby等&#xff0c;读取线上…

论文浅尝 | ERNIE-ViL:从场景图中获取结构化知识来学习视觉语言联合表示

笔记整理&#xff1a;朱珈徵&#xff0c;天津大学硕士链接&#xff1a;https://www.aaai.org/AAAI21Papers/AAAI-6208.YuFei.pdf动机现有的视觉语言预训练方法试图通过在大的图像文本数据集上的视觉基础任务来学习联合表示&#xff0c;包括基于随机掩码子词的掩码语言建模、掩码…

LeetCode 222. 完全二叉树的节点个数(二分查找)

1. 题目 给出一个完全二叉树&#xff0c;求出该树的节点个数。 说明&#xff1a; 完全二叉树的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能没填满外&#xff0c;其余每层节点数都达到最大值&#xff0c;并且最下面一层的节点都集中在该层最左边的若干…

常见的统计分析方法汇总,指标对比分析、时间序列预测

常见的八种统计分析法如下&#xff1a; 指标对比分析法分组分析法时间数列及动态分析法指数分析法平衡分析法综合评价分析景气分析预测分析 1 比较分析法## 一、指标对比分析法指标对比分析法&#xff0c;又称比较分析法&#xff0c;是统计分析中最常用的方法。是通过有关的指…

这三个NLP项目写进简历,网申通过率提高50%

01三大企业级项目项目一京东智能对话系统项目项目简介&#xff1a;智能客服机器人已经成为了客服系统的重要组成部分&#xff0c;帮助人工客服提升工作效率&#xff0c;为企业降低人工成本。作为智能客服的行业先驱&#xff0c;京东多年来致力打造全链路的客服机器人&#xff0…

论文浅尝 | MulDE:面向低维知识图嵌入的多教师知识蒸馏

笔记整理&#xff1a;朱渝珊&#xff0c;浙江大学在读博士&#xff0c;研究方向为快速知识图谱的表示学习&#xff0c;多模态知识图谱。Motivation为了更高的精度&#xff0c;现有的KGE方法都会采用较高的embedding维度&#xff0c;但是高维KGE需要巨大的训练成本和存储空间。现…

LeetCode 453. 最小移动次数使数组元素相等(数学)

1. 题目 给定一个长度为 n 的非空整数数组&#xff0c;找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。 示例: 输入: [1,2,3]输出: 3 解释: 只需要3次移动&#xff08;注意每次移动会增加两个元素的值&#xff09;&#xff1a;[1,2,3] > [2…

性能优化模式

摘要 性能优化涉及面很广。一般而言&#xff0c;性能优化指降低响应时间和提高系统吞吐量两个方面&#xff0c;但在流量高峰时候&#xff0c;性能问题往往会表现为服务可用性下降&#xff0c;所以性能优化也可以包括提高服务可用性。在某些情况下&#xff0c;降低响应时间、提高…