跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++算法

二叉树深度计算与先序序列重构算法实战

探讨二叉树领域的两个经典递归问题。首先通过左右子树高度最大值加一的方式计算二叉树深度,利用数组存储节点关系实现高效遍历。其次解决由中序和后序序列推导先序序列的问题,核心在于定位根节点并划分左右子树区间进行递归构建。代码采用 C++ 实现,注重逻辑清晰与边界处理,适合算法初学者巩固递归思想与树结构操作。

人间过客发布于 2026/3/21更新于 2026/7/2335 浏览
二叉树深度计算与先序序列重构算法实战

二叉树深度计算

题目描述

给定一棵二叉树的节点数 n,以及每个节点的左右子节点编号(若为 0 表示无子节点)。根节点固定为 1。要求计算该二叉树的最大深度。

解题思路

二叉树的深度定义为从根节点到最远叶子节点的最长路径上的节点数。对于任意节点,其深度等于左右子树深度的较大值加 1。这是一个典型的递归场景,无需构建复杂的树结构,直接用数组存储父子关系即可高效求解。

代码实现

#include <iostream>
#include <algorithm>
using namespace std;

const int N = 1e6 + 10;
int l[N], r[N]; // 存储左右子节点

// 递归计算以 root 为根的子树深度
int dfs(int root) {
    if (!root) return 0; // 空节点深度为 0
    return max(dfs(l[root]), dfs(r[root])) + 1;
}

int main() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> l[i] >> r[i];
    }
    cout << dfs(1) << endl;
    return 0;
}

由中序与后序序列求先序排列

题目描述

已知一棵二叉树的中序遍历序列和后序遍历序列,求其先序遍历序列。

解题思路

后序遍历的最后一个元素是当前子树的根节点。在中序遍历中找到该根节点,即可将序列划分为左子树和右子树部分。利用这一性质递归处理左右区间,即可按'根 - 左 - 右'的顺序输出先序序列。

注意:在递归划分时,需准确计算左右子树在后序序列中的对应区间边界,避免越界或逻辑错误。

代码实现

#include <iostream>
#include <string>
using namespace std;

string in_order, post_order;

// l1, r1: 中序序列区间
// l2, r2: 后序序列区间
void dfs(int l1, int r1, int l2, int r2) {
    if (l1 > r1) return; // 区间无效直接返回

    // 后序序列的最后一个字符是根节点
    cout << post_order[r2];

    // 在中序序列中寻找根节点位置
    int p = l1;
    while (in_order[p] != post_order[r2]) p++;

    // 递归处理左子树
    // 左子树长度:p - l1
    // 后序左子树区间:[l2, l2 + (p - l1) - 1]
    dfs(l1, p - 1, l2, l2 + p - l1 - 1);

    // 递归处理右子树
    // 右子树起始在后序中的位置:l2 + (p - l1)
    dfs(p + 1, r1, l2 + p - l1, r2 - 1);
}

int main() {
    cin >> in_order >> post_order;
    dfs(0, in_order.size() - 1, 0, post_order.size() - 1);
    return 0;
}

总结

这两个问题都体现了递归思想在树形结构中的核心作用。前者通过自底向上聚合高度信息,后者通过根节点定位分割序列。在实际刷题中,建议多画图辅助理解区间变化,确保递归终止条件和参数传递无误。

目录

  1. 二叉树深度计算
  2. 题目描述
  3. 解题思路
  4. 代码实现
  5. 由中序与后序序列求先序排列
  6. 题目描述
  7. 解题思路
  8. 代码实现
  9. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Windows 系统 Python 安装与 uv 管理最佳实践
  • AI 辅助 9·1 软件安装:环境检测与问题修复方案
  • Python+TensorRT+ONNX 实现大模型量化部署
  • ComfyUI v0.11.1 发布:新增开发者节点、API 强化与 Python 3.14 兼容
  • SketchUp STL 插件使用指南:从建模到打印
  • Python 入门基础教程:从环境配置到面向对象编程
  • OpenClaw 自托管 AI 助手:安装体验与架构原理深度解析
  • DeepSeek-V2-Chat-0628 开源大模型评测与性能分析
  • Java 注解与反射实战:自定义日志与参数校验注解
  • 神秘巨星:谁才是真正的超级巨星?
  • LLaMA 网络架构深度解析
  • 内容创作新范式:从 AIGC 到智能体工作流
  • 多模态 AI 开发实战:图文音视频一体化处理指南
  • 大模型技术对汽车行业的影响与变革
  • OpenClaw“养龙虾”热潮降温解析:从技术狂欢到理性回归
  • 前端三基石:从后端视角理解 HTML、CSS 与 JavaScript
  • Transformer 大模型实战:子词词元化算法原理与实践
  • 笔记本 CPU 环境下 Faster-Whisper 模型选型建议
  • R 语言在 AIGC 时代的数据分析应用与实践
  • LangGraph 入门与实战:基于 Agent 状态机的工具调用实践

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online