题目描述:
完全二叉树是每一层(除最后一层外)都是完全填充(即,节点数达到最大)的,并且所有的节点都尽可能地集中在左侧。
设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操作:
CBTInserter(TreeNode root) 使用头节点为 root 的给定树初始化该数据结构;
CBTInserter.insert(int v) 向树中插入一个新节点,节点类型为 TreeNode,值为 v 。使树保持完全二叉树的状态,并返回插入的新节点的父节点的值;
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]]

提示:
最初给定的树是完全二叉树,且包含 1 到 1000 个节点。
每个测试用例最多调用 CBTInserter.insert 操作 10000 次。
给定节点或插入节点的每个值都在 0 到 5000 之间。

方法1:
主要思路:解题链接汇总
(1)使用数组按序存储满二叉树;
(2)对于原始给定的二叉树,使用广度优先进行构建初始的存储数据;
(3)对于后续的要插入的元素,先根据数组的索引关系,确定其父节点的存储索引,然后插入;

/*** 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 CBTInserter {public:vector<TreeNode*> tree;CBTInserter(TreeNode* root) {queue<TreeNode*> q;q.push(root);while(!q.empty()){TreeNode* cur=q.front();q.pop();tree.push_back(cur);if(cur->left!=nullptr){q.push(cur->left);}if(cur->right!=nullptr){q.push(cur->right);}}}int insert(int val) {int index=(tree.size()-1)/2;if(index*2+1==tree.size()){tree[index]->left=new TreeNode(val);tree.push_back(tree[index]->left);}else{tree[index]->right=new TreeNode(val);tree.push_back(tree[index]->right);}return tree[index]->val;}TreeNode* get_root() {if(tree.size()==0){return nullptr;}return tree[0];}
};/*** Your CBTInserter object will be instantiated and called as such:* CBTInserter* obj = new CBTInserter(root);* int param_1 = obj->insert(val);* TreeNode* param_2 = obj->get_root();*/

919 完全二叉树插入器相关推荐

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

    1. 题目 完全二叉树是每一层(除最后一层外)都是完全填充(即,结点数达到最大)的,并且所有的结点都尽可能地集中在左侧. 设计一个用完全二叉树初始化的数据结构 CBTInserter,它支持以下几种操 ...

  2. LeetCode 0919. 完全二叉树插入器:完全二叉树的数组表示

    [LetMeFly]919.完全二叉树插入器:完全二叉树的数组表示 力扣题目链接:https://leetcode.cn/problems/complete-binary-tree-inserter/ ...

  3. LeetCode题解(0919):设计完全二叉树插入器(Python)

    题目:原题链接(中等) 标签:树.二叉树.广度优先搜索.设计 解法 时间复杂度 空间复杂度 执行用时 Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 100ms (2 ...

  4. ChipScope Pro内核插入器

    ChipScope Pro内核插入器 ChipScope Pro内核插入器的文件后缀名为cdc.在ISE工程中可以创建一个新的cdc程序,也可以在实现流程中激活内核插入器. 注意:使用内核插入器之前, ...

  5. Android Animation时间插入器Interpolator

    http://blog.csdn.net/lixiang0522/article/details/7893239 属性动画系统是非常强健的框架,允许你移动几乎任何东西.你可以定义一个动画去改变任何对象 ...

  6. 基于Android自带插入器的图形波动效果 --转载自李硕老师博客160303

    原文地址:http://blog.csdn.net/u012215170/article/details/50598747 对于Android的各种动画我们并不陌生,但是可能很多同学不知道Interp ...

  7. 微信Hook实战记录2:动手实现恶意dll内存插入器

    Hook任何软件,整体思路都是通过内存调试软件对软件运行时内存进行断点调试,找到想要hook的内存地址,转为可以通过程序主dll可以获得的相对地址,然后再此处插入自己的恶意汇编代码,如果代码比较复杂, ...

  8. 如何学好C语言--你的学渣朋友告诉你

    光说不练假把式,光练不说傻把式,又练又说真把式. 真实感受,不是我不想学,是我真的不知道我哪里不会啊和得怎么做啊?本文作者当初就是这么废掉的 推荐两个练习的网站 (一)C语言网 https://www ...

  9. 【LeetCode】2022 7月 每日一题

    [LeetCode]2022 7月 每日一题 前言 七月太忙了,又是项目又是练车又是各种比赛.大概有10天的每日一题没有当天写完(虽然后面补上了). 将每日一题的所有思路记录在这里分享一下. 7.1 ...

最新文章

  1. Android SDK 路径修改
  2. python 功能 代码_挑战“不可能”的代码:你不知道的Python功能
  3. JAVA 线程Join
  4. mysql 5.7 备份innodb_mysql5.7 innodb数据库备份工具Xtrabackup的安装
  5. ActiviteX 服务控件
  6. Android之TypedArray 为什么需要调用recycle()
  7. markdown-Macdown
  8. 3.5 卷积神经网络进阶-Inception-mobile_net 实战
  9. nginx RTMP FFmpeg 视频直播
  10. html css回顾总结
  11. [弗曼学习法] Study for learning methods
  12. 银行家算法(C++实现)
  13. 支付行业架构流程梳理
  14. NDB Cluster 基本介绍
  15. Opencv 圆形标定板相机标定
  16. 拒绝“累丑”,走进RPA的世界
  17. 利用JavaScript生成动态添加歌单
  18. SEI(Supplemental Enhancement Information)
  19. excel的vlookup如果是#N/A就显示空白
  20. 层叠上下文-《CSS 世界》阅读笔记

热门文章

  1. 传奇服务端常见gameofblue脚本命令代码详解
  2. spring注解及扩展
  3. 一文读懂IMF和各国央行数字货币到底有何关系
  4. 基于Python web信息旅游管理系统
  5. 统计学—基于R 第一章 数据处理
  6. 前端面试+学习笔记(HTML+CSS+JavaScript+ES6+Vue+NodeJs)
  7. 在线解析xml,json数据的网址
  8. 互联网快讯:粉笔科技创新推进OMO模式;猿辅导以科技助力教育提质增效;“莆田鞋”注册成功
  9. 股票入门基础知识37:识别交易中的支撑位和阻力位
  10. Vue小项目Mock.js的学习