首页 > 编程语言 >C++ 根据层序遍历数组 构造二叉树

C++ 根据层序遍历数组 构造二叉树

时间:2024-08-08 20:31:31浏览次数:7  
标签:right TreeNode cur 层序 tree C++ next 二叉树 left

说明

该层序遍历数组中空节点会使用-1代替,即该层序遍历数组可以理解为一个完全二叉树

代码

利用队列实现左右子节点的存储,每次通过获取队列头部元素即为当前头节点,然后在数组中i和i+1对应该头结点下的左右子节点,如果不为-1,那么说明可以入队。

struct TreeNode
{
  int val;
  TreeNode* left;
  TreeNode* right;
  TreeNode(int x): val(x),left(nullptr),right(nullptr){}
};

TreeNode* BuildTree(vector<int>& tree)
{
  if(tree.empty()) return nullptr;
  TreeNode* root = new TreeNode(tree[0]);
  queue<TreeNode*> q
  q.push(root);

  int next = 1;
  while(next < tree.size())
  {
    TreeNode* cur = q.front();
    q.pop();
    
    if(next < tree.size() && tree[next] != -1)
    {
      cur->left = new TreeNode(tree[next]);
      q.push(cur->left);
    }  
    next++;
    if(next < tree.size() && tree[next] != -1)
    {
      cur->right = new TreeNode(tree[next]);
      q.push(cur->right);
    }  
    next++;
  }

  return root;
}

标签:right,TreeNode,cur,层序,tree,C++,next,二叉树,left
From: https://www.cnblogs.com/XTG111/p/18349643

相关文章

  • C++进制转换
    这篇代码是我早就打出来的,当时放在百度网盘,本地放在硬盘上,后来硬盘坏了,最近清网盘的时候才想起来,所以赶紧改了改就发出来了这也是我比较早的代码了,所以记得并不清楚,改也只改了一点,当时不爱打注释,具体思路也忘得一干二净,所以直接把代码贴出来了(好像屁话有点多)Code:#include......
  • LeetCode144 二叉树的前序遍历
    前言题目:144.二叉树的前序遍历文档:代码随想录——二叉树的递归遍历编程语言:C++解题状态:基础知识不了解思路两种思路,第一是递归。递归算法有三个要素。每次写递归,都按照这三要素来写!确定递归函数的参数和返回值:确定哪些参数是递归的过程中需要处理的,那么就......
  • 实时人脸换脸——基于C++与Onnxruntime调用GPU实现实时换脸
    1、概述1.1算法概述人脸换脸是一种使用人工智能技术来实时或离线地将视频中的人脸替换成另一张人脸的技术。近年来,随着深度学习技术的发展,这一领域取得了显著进展。常见的人脸换脸项目有:Deepfake:这是最著名的换脸算法之一,使用深度学习技术合成人脸图像,通常使用卷积神......
  • Depth Anything强大的单目深度估计Python与C++模型部署
    引言最近看到一个叫DepthAnything单目深度估计模型火了,于是抽空把代码和模型下载下来体验了一下,发现确实是很强大。论文链接:https://arxiv.org/pdf/2401.10891.pdf代码链接:https://github.com/LiheYoung/Depth-Anything项目主页:https://depth-anything.github.io/本......
  • C++ - 二级指针动态内存申请与释放
    C语言描述:#include"stdio.h"#include"stdlib.h"#include"assert.h"//二维数组内存申请int**createArray2D(introw,intclos){ int**pArray=(int**)malloc(sizeof(int*)*row); assert(pArray); for(inti=0;i<row;i++) { ......
  • 一文搞懂C/C++常用编译器
    1.C++编译器介绍1.1.MSVC1.1.1.VisualC++与VisualStudio的版本对应关系1.1.2.工具链的主要工具1.2.GCC1.2.1.GCC的主要优点1.2.2.GCC的常用工具1.2.3.MinGW1.3.Clang/LLVM1.3.1.Clang介绍1.3.2.Clang与LLVM的关系1.3.3.Clang/LLVM与GCC2.......
  • C++ char*类型与vector类型的相互转换
    char*类型与vector<char>类型的相互转换很多时候需要使用动态的字符串,但是char*难以完成相应的扩容操作,而动态数组vector则可以简单地完成,结合二者特性就可以完成动态字符串,同时,也需要二者类型的相互转换:char*转vector<char> vector<char>buffer(ch,ch+4);vector<cha......
  • C++竞赛初阶L1-10-第四单元-if练习(第24课)100015: 判断能否被 3,5,7 整除
    题目内容给定一个整数 x,判断它能否被 3,5,7 整除,并输出以下信息:1、能同时被 3,5,7 整除(直接输出 357,每个数中间一个空格);2、只能被其中两个数整除(按从小到大的顺序输出两个数,例如:35 或者 37 或者 57,中间用空格分隔);3、只能被其中一个数整除(输出这个除数);4、不能......
  • 二叉树的递归套路
    二叉树的递归套路二叉树结构二叉树是一个将数据组织成头尾相连的特殊链表,每一个数据单元与链表一样有一个指向其的指针,但与链表不同的是其可以有两个指向其他单元的指针,分别是其左孩子与右孩子。采用该这种结构,最终数据的呈现形式会与“链”不一样,而呈现出了一种树的结构。对......
  • VsCode C++ namespace has no member错误
    此问题VSCode C++插件本身bug解决办法一:还原c++插件到旧版本解决方法二:但此方法智能提示会有很多多余的信息(有缺陷)在官方未推出相应布丁之前,可按照以下步骤避免该问题:1、按顺序打开:文件》首选项》设置2、在右边,用户设置窗口添加以下代码:"C_Cpp.intelliSenseEngine":"TagP......