那么此时大家是不是应该知道了,数组如何转化成 二叉树了。如果父节点的数组下标是i,那么它的左孩子下标就是i * 2 + 1,右孩子下标就是 i * 2 + 2

#include <iostream>
#include <vector>
#include <queue>
using namespace std;struct TreeNode {int val;TreeNode *left;TreeNode *right;TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};// 根据数组构造二叉树
TreeNode* construct_binary_tree(const vector<int>& vec) {vector<TreeNode*> vecTree (vec.size(), NULL);TreeNode* root = NULL;for (int i = 0; i < vec.size(); i++) {TreeNode* node = NULL;if (vec[i] != -1) node = new TreeNode(vec[i]);vecTree[i] = node;if (i == 0) root = node;}for (int i = 0; i * 2 + 2 < vec.size(); i++) {if (vecTree[i] != NULL) {vecTree[i]->left = vecTree[i * 2 + 1];vecTree[i]->right = vecTree[i * 2 + 2];}}return root;
}// 层序打印打印二叉树
void print_binary_tree(TreeNode* root) {queue<TreeNode*> que;if (root != NULL) que.push(root);vector<vector<int>> result;while (!que.empty()) {int size = que.size();vector<int> vec;for (int i = 0; i < size; i++) {TreeNode* node = que.front();que.pop();if (node != NULL) {vec.push_back(node->val);que.push(node->left);que.push(node->right);}// 这里的处理逻辑是为了把null节点打印出来,用-1 表示nullelse vec.push_back(-1);}result.push_back(vec);}for (int i = 0; i < result.size(); i++) {for (int j = 0; j < result[i].size(); j++) {cout << result[i][j] << " ";}cout << endl;}
}int main() {// 注意本代码没有考虑输入异常数据的情况// 用 -1 来表示nullvector<int> vec = {4,1,6,0,2,5,7,-1,-1,-1,3,-1,-1,-1,8};TreeNode* root = construct_binary_tree(vec);print_binary_tree(root);
}

ACM模式数组构建二叉树相关推荐

  1. 力扣105 先序和中序遍历数组构建二叉树

    package leetcode;/*** projectName: study000* time: 2020/12/18 22:04* description:前中序构建二叉树*/ public c ...

  2. ACM模式输入输出攻略 | C++篇

    文章目录 ACM模式输入输出攻略 | C++篇 1.核心代码模式与ACM模式 2.C++常用的输入输出方法 2.1 输入 (1)cin (2)getline() (3)getchar() 2.2 输出 ...

  3. [JS]在ACM模式下获取输入

    输入输出处理 核心代码模式处理 不需要处理任何输入输出,直接返回值即可. ACM 模式 你的代码需要处理输入输出,请使用如下样例代码读取输入和打印输出: while (line = readline( ...

  4. C++ ACM模式输入输出

    C++ ACM模式输入输出 以下我们都以求和作为题目要求,来看一下各种输入输出应该怎么写. 1 只有一个或几个输入 输入样例: 3 5 7 输入输出模板: int main() {int a, b, ...

  5. 【LeetCode】——根据前序和中序遍历构建二叉树

    题目描述:从前序与中序遍历序列构建二叉树 注意:你可以假设数中没有重复元素. 例如,给出: 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,2 ...

  6. 【数据结构】——构建二叉树,遍历二叉树

    二叉树的数据结构: 1 typedef struct BiTree{ 2 char item; 3 struct BiTree *lchild,*rchild; 4 }BiTree; 构建一个二叉树: ...

  7. Leetcode106 由中序序列和后序序列构建二叉树

    最难的地方在于对序列的下标计算,比如给定一个序列,开始下标是i,那么下标i+1就是开始元素的后一个元素,注意到,1还是当前元素组成的列表的元素个数.即i + size,是包含i元素在内的size个数组 ...

  8. 中序遍历+后序/先序遍历构建二叉树

    中序遍历+后序/先序遍历构建二叉树 @(算法学习) 给定中序+先序,中序+后序可以唯一构建一棵二叉树. 给定先序+后序,无法唯一确定,但是却是很好的考点,问总共有多少种可能...如2016.9月份PA ...

  9. 根据二叉树先序遍历和中序遍历构建二叉树

    前方有一个人在等着你,你只管勇敢的向前走 采用递归分治的思想,将一个大问题划分成子问题, 对于本题,根据二叉树先序遍历和中序遍历构建二叉树,思路: 我们可以求得根节点左子树的先序和中序序列,以及右子树 ...

最新文章

  1. Unity 3D 2019.3.12版本创建一个按钮,并为该按钮添加点击Click的消息响应函数以及点击按钮切换场景
  2. flex与flash的交互
  3. Oracle 11g 新特性 -- 自适应游标共享(Adaptive Cursor Sharing: ACS) 说明
  4. java sdk下载_Java Sdk下载 | 保利威帮助中心
  5. markdown 中的一些 html 使用属性
  6. 使用Hutool来实现深拷贝
  7. 设备独立的操作系统软件
  8. java json.stringify_浅谈 JSON.stringify 方法
  9. 解决Hash冲突四种方法
  10. 英语单词记忆(词缀 / 词根)
  11. 谷歌浏览器任何页面崩溃解决方法
  12. 利用机器学习进行恶意代码分类
  13. css3图片倾斜3d动画效果
  14. shel--常用快捷键
  15. 一文看懂推荐系统:概要01:推荐系统的基本概念
  16. 王者荣耀s14服务器维护时间,王者荣耀s14更新时间是什么时候 王者荣耀s14赛季时间...
  17. 设计模式-合成复用原则-》面向对象设计原则
  18. 系统扫描修复cmd命令
  19. IEC标准中type1 type2 type3输入
  20. 【图】深度优先遍历 广度优先遍历

热门文章

  1. 6 WM配置-主数据-定义存储区(Storage Section)
  2. python input函数用法mac_py003.python变量及input函数练习
  3. MFC工程按USB插口显示所有USB设备及插口(包括安卓)
  4. table表格for循环绑定数据_.NET MVC 页面表格绘制
  5. 离线或在线加载pytorch、mmdetection预训练模型vgg、resnet、alexnet等
  6. 资源:网页翻译API(文档)
  7. WebStorm 零起点搭建Vuejs项目 - 全程篇
  8. 我的世界服务器如何做无限箱子,我的世界无限存储箱子制作教程详解
  9. open with code 报错没有项目_Python开发:解决Ubuntu安装tesserocr报错
  10. 两个list取交集_利用jieba计算两个句子的相似度