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

笔记:二叉树构建方法

本文有点粗糙,如有错误,请批评指正

层式建树(最通用,适合层序 + 用 0 补齐所有空位以及紧凑层序(按层给节点,0 表空,但不强制补齐所有空位,每个非空节点依次给两个孩子两种情况,其中第二种情况不能使用堆式建树)

例如紧凑层序vec = [1, 0, 2, 3, 4]

正确应为

    1/ \null 2/ \3   4

但是用堆式建树的话就会错误i实现实现:

  • 下标 0 的孩子是 1、2 ⇒ 根的左=vec[1]=0(空),右=vec[2]=2 ✅

  • 下标 1(就是那个空)按规则孩子在 3、4 ⇒ 但因为 node[1]==nullptr,你的代码不会把 node[3]node[4] 连上(直接 continue

  • 下标 2 的孩子在 5、6 ⇒ 越界,不会连

于是3 和 4 成了“孤儿节点”,根本没有挂到树上。构造出的树是:

    1/ \null 2

TreeNode* build_level(const vector<int>& a) {if (a.empty() || a[0] == 0) return nullptr;queue<TreeNode*> q;int i = 0;TreeNode* root = new TreeNode(a[i++]);q.push(root);while (!q.empty() && i < (int)a.size()) {TreeNode* cur = q.front(); q.pop();// 左孩子if (i < (int)a.size() && a[i] != 0) {cur->left = new TreeNode(a[i]);q.push(cur->left);}i++;// 右孩子if (i < (int)a.size() && a[i] != 0) {cur->right = new TreeNode(a[i]);q.push(cur->right);}i++;}return root;
}

堆式建树:

struct TreeNode {int val;TreeNode *left, *right;TreeNode(int v): val(v), left(nullptr), right(nullptr) {}
};TreeNode* build(const vector<int>& v) {int n = v.size();if (n == 0) return nullptr;vector<TreeNode*> nodes(n, nullptr);for (int i = 0; i < n; ++i)if (v[i] != -1) nodes[i] = new TreeNode(v[i]);for (int i = 0; i < n; ++i) {if (!nodes[i]) continue;int L = 2*i + 1, R = 2*i + 2;if (L < n) nodes[i]->left  = nodes[L];if (R < n) nodes[i]->right = nodes[R];}return nodes[0];
}

http://www.dtcms.com/a/346339.html

相关文章:

  • 从“配置化思维”到“前端效率革命”:xiangjsoncraft 如何用 JSON 简化页面开发?
  • 【源码】MES系统:从下达计划、执行反馈、异常预警到过程控制的一整套执行中枢。
  • FastTracker:实时准确的视觉跟踪
  • 一键部署openGauss6.0.2轻量版单节点
  • DPY-3010: connections to this database server version are not supported by p
  • LoRA内幕机制解析(53)
  • Design Compiler:层次模型(Block Abstraction)的简介
  • 什么是神鸟云?
  • 亚马逊老品怎么再次爆发流量?
  • 软件测试要怎么自学?
  • CVPR 2025 | 哈工大港大DeCLIP:解耦CLIP注意力实现开放词汇感知!
  • RK3588随笔:MIPI协议——D-PHY 物理层的自定义和校验
  • codeforces round 1043(div3) 补题
  • Finite State Machine(FSM) for the Development Mode
  • NVM-Windows 命令大全
  • YOLO --- YOLOv5模型以及项目详解
  • Tiger任务管理系统-13
  • MiniOB环境部署开发(使用Docker)
  • FPC设计技巧
  • 解释实现哈希值作为唯一的ID以及后面的hexdigest是什么意思
  • 剑指数组相关
  • CSS自定义属性(CSS变量)
  • 全面解析 `strncasecmp` 字符串比较函数
  • ES6变量与解构:let、const与模板字符串全解析
  • 53 C++ 现代C++编程艺术2-枚举和枚举类
  • 大麦盒子DM4036亲测刷包实践笔记
  • AI领域的语义空间是什么?
  • 波士顿房价线性回归预测讲解
  • 基于SpringBoot的家教信息预约管理系统【2026最新】
  • Spring IOC 原理与高级特性剖析