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

leetcode 919.完全二叉树插入器

1.题目要求:

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

设计一种算法,将一个新节点插入到一棵完全二叉树中,并在插入后保持其完整。

实现 CBTInserter 类:

CBTInserter(TreeNode root) 使用头节点为 root 的给定树初始化该数据结构;
CBTInserter.insert(int v)  向树中插入一个值为 Node.val == val的新节点 TreeNode。使树保持完全二叉树的状态,并返回插入节点 TreeNode 的父节点的值;
CBTInserter.get_root() 将返回树的头节点。

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:
    //设置树的根
    TreeNode* root_t;
    //设置队列用于层序遍历
    queue<TreeNode*> quence;
    CBTInserter(TreeNode* root) {
        root_t  = root;
        //把初始后的树根放入队列中 
        quence.push(root);
    }
    
    int insert(int val) {
        //设置父亲结点的值
        int parent_value;
        while(quence.size() != 0){
            TreeNode* temp = quence.front();
            //如果队列的头节点两边都不为空,则进行正常的层序遍历
            if(temp->left != NULL&&temp->right != NULL){
                quence.push(temp->left);
                quence.push(temp->right);
                quence.pop();
            }else{//如果不是,则判断是那个树的左右子树那个是空的,再进行结点挂接
                if(temp->left == NULL){
                    temp->left = new TreeNode(val);
                    parent_value = temp->val;
                    break;
                }
                if(temp->right == NULL){
                    temp->right = new TreeNode(val);
                    parent_value = temp->val;
                    break;
                }
            }
        }
        return parent_value;
    }
    
    TreeNode* get_root() {
        //返回根节
        return root_t;
    }
};

/**
 * 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();
 */

http://www.kler.cn/a/406613.html

相关文章:

  • Docker核心概念总结
  • 计算机网络socket编程(4)_TCP socket API 详解
  • 深度学习3
  • 影响电阻可靠性的因素
  • 基于RTEMS项目学习waf build system
  • 从复合字符串中分割并解析多个JSON字符串
  • MacOS通过X11转发远程运行virt-manager进行虚机分配
  • 笔记记录 k8s-install
  • Ubuntu文件系统简记
  • 如何删除Kafka中的数据以及删除topic
  • aws配置飞书告警通知
  • Elasticsearch面试内容整理-高级特性
  • 基于Redis实现的手机短信登入功能
  • Android开发实战班 - 现代 UI 开发之 Modifier 全面应用
  • HarmonyOS笔记5:ArkUI框架的Navigation导航组件
  • 第 21 章 - Go lang反射机制
  • (python)unittest框架
  • 《线性代数的本质》
  • 拥抱极简主义前端开发:NoCss.js 引领无 CSS 编程潮流
  • 基于Springboot+Vue动漫推荐平台管理系统(源码+lw+讲解部署+PPT)
  • [NewStarCTF 2023]Include--详细解析
  • 设计模式之 观察者模式
  • 卷积神经网络(CNN)中的池化层(Pooling Layer)
  • oracle排查长时间没提交的事务造成的阻塞案例
  • SPA 单页面深入解读:优劣势剖析及实现方法
  • Qt自定义表格TableWidget实现整行单列按键逐行切换及跳转首尾