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

【数据结构与算法】二叉树从建立开始

为什么你学了二叉树却还是不会做题从“建树”到“解题”的完整思维体系在学习数据结构的过程中二叉树几乎是每个人都会接触的内容。但一个很现实的问题是很多人会写遍历却不会做题。表面上看是代码能力的问题实际上是对“树的结构信息”理解不够深入。你可能掌握了前序、中序、后序的写法但没有真正理解这些遍历在表达什么。这篇文章不讲表面知识而是从结构本质出发帮助你建立一套完整的二叉树思维体系。一、问题的根源你只是记住了“顺序”却没有理解“信息”我们先来看三个最基础的遍历前序遍历根 → 左 → 右中序遍历左 → 根 → 右后序遍历左 → 右 → 根很多人停留在“顺序记忆”这一层但真正关键的问题是这些遍历分别提供了什么信息二、三种遍历的“信息含义”理解这一点是所有树题的基础。前序遍历的作用是确定根节点。因为每次递归时第一个访问的一定是当前子树的根。后序遍历同样可以确定根节点只不过是在最后一个位置。而中序遍历的作用完全不同。它的价值在于可以明确划分左右子树的边界。换句话说如果你知道某个节点在中序遍历中的位置那么它左边的所有节点一定属于左子树右边的所有节点一定属于右子树。这就是为什么中序是“分结构”的关键。三、为什么“中序 前序”可以建树理解了上面的信息我们再来看建树问题。给定前序遍历中序遍历我们可以这样恢复整棵树第一步从前序中取出第一个元素作为根节点。第二步在中序中找到这个根节点的位置。第三步根据这个位置将中序划分为左子树和右子树。第四步根据左子树的长度在前序中切分出对应的部分。第五步递归处理左右子树。整个过程可以概括为三句话找根节点划分区间递归构建。四、经典代码实现中序 前序建树#includeiostream using namespace std; struct TreeNode { char val; TreeNode* left; TreeNode* right; TreeNode(char x) : val(x), left(nullptr), right(nullptr) {} }; TreeNode* buildTree(string preorder, string inorder) { if (preorder.empty()) return nullptr; char rootVal preorder[0]; TreeNode* root new TreeNode(rootVal); int pos inorder.find(rootVal); string leftIn inorder.substr(0, pos); string rightIn inorder.substr(pos 1); string leftPre preorder.substr(1, leftIn.size()); string rightPre preorder.substr(1 leftIn.size()); root-left buildTree(leftPre, leftIn); root-right buildTree(rightPre, rightIn); return root; }这段代码本质上是在不断缩小问题规模每一层递归都在构建一棵子树。五、为什么“前序 后序”不行这是一个非常经典但容易被忽略的问题。来看一个简单例子前序AB后序BA可能的树结构有两种一种是 B 是 A 的左孩子另一种是 B 是 A 的右孩子。这两种树的前序和后序完全一样但结构不同。原因在于当一个节点只有一个孩子时无法判断这个孩子是在左还是右。因此前序和后序缺乏“划分左右”的能力。六、建树问题的统一思维模型无论是哪种变形题本质都可以抽象为三个步骤确定当前子树的根节点利用中序信息划分左右子树递归构建子结构这是一种典型的分治思想。如果你能把这三步内化为本能那么所有建树题都会变得非常简单。七、性能问题与优化思路上面的代码虽然直观但存在一个性能问题。在每一层递归中我们都使用了inorder.find(rootVal);这是一个线性查找时间复杂度为 O(n)。在最坏情况下整体复杂度会退化为 O(n²)。优化方法使用哈希表我们可以提前记录每个字符在中序中的位置#includeunordered_map unordered_mapchar, int mp; for (int i 0; i inorder.size(); i) { mp[inorder[i]] i; }之后查找根节点位置只需要int pos mp[rootVal];这样可以将整体复杂度优化到 O(n)。这一步在面试中属于明显的加分点。八、从“会建树”到“会做题”的关键跃迁很多人学完建树之后还是做不好题原因在于他们把建树当作终点。实际上建树只是开始。真正重要的是你能否在树的结构上进行操作。常见的进阶方向层序遍历用于按层处理问题例如右视图、最短路径等。深度优先搜索用于路径问题、子树问题等。树形动态规划用于求最大路径和、最长距离等复杂问题。最近公共祖先经典面试高频题。九、一个决定你上限的认知在解决树问题时你需要不断问自己一个问题当前这个节点的决策依赖于什么信息这些信息可能来自左子树右子树当前节点本身这就是树形递归的本质。十、为什么很多人卡在树这一关总结常见问题第一只记代码不理解结构。第二把递归当模板套而不是当作“问题拆解”。第三无法从整体结构角度思考问题。这些问题叠加在一起就会导致会写但不会用。十一、建立正确的学习路径如果你正在学习二叉树可以按照以下顺序第一阶段理解并实现建树第二阶段掌握各种遍历递归与非递归第三阶段熟练使用 DFS 和 BFS第四阶段解决路径类问题第五阶段学习树形动态规划这个路径是从“结构理解”到“问题解决”的完整过程。十二、总结二叉树的核心并不在于代码而在于结构。前序和后序帮助你找到根节点中序帮助你划分结构而递归负责将整个过程串联起来。当你真正理解这一点之后你会发现大部分树题都只是这个模型的不同应用。一旦建立了这种结构化思维二叉树将不再是难点而会成为你算法能力的重要支撑。

相关文章:

【数据结构与算法】二叉树从建立开始

为什么你学了二叉树却还是不会做题?从“建树”到“解题”的完整思维体系在学习数据结构的过程中,二叉树几乎是每个人都会接触的内容。但一个很现实的问题是:很多人会写遍历,却不会做题。表面上看是代码能力的问题,实际…...

【数据结构与算法】树,森林,二叉树之间的转换

树的定义(递归定义)树是满足以下条件的结构:有且仅有一个根节点(没有父节点的节点)其他节点分成 m 个互不相交的子树每个子树本身也是一棵树树的基本术语术语解释例子根节点最顶层的节点,没有父节点文件夹系…...

百考通:AI精准驱动数据分析,让数据价值高效落地

在数字化浪潮席卷各行各业的今天,数据已成为核心生产要素,但如何从海量数据中挖掘价值、辅助决策,始终是企业与个人面临的核心难题。传统数据分析流程繁琐、技术门槛高、周期漫长,让许多非专业人士望而却步。百考通(ht…...

百考通:AI精准赋能实践报告,让实习总结高效又专业

对于每一位在校学生和职场新人而言,实践报告都是记录成长、沉淀经验的关键载体,却也常常成为令人头疼的难题:要么不知如何梳理工作脉络,要么难以精准提炼收获与反思,要么在格式规范和字数要求上反复纠结。百考通&#…...

百川2-13B-4bits量化版API优化:降低OpenClaw任务Token消耗20%

百川2-13B-4bits量化版API优化:降低OpenClaw任务Token消耗20% 1. 问题背景与优化动机 上周在调试OpenClaw自动化流程时,我发现一个奇怪现象:同样的文件整理任务,在不同时段运行时消耗的Token数量差异能达到30%。作为个人开发者&…...

为什么2026年还有企业在用Excel算工资?新工具提升HR工作效率

HR工资系统软件是帮助企业实现薪酬自动化核算、个税申报、社保公积金管理的数字化工具。现代工资系统通常集成考勤、绩效、人事等模块,支持复杂薪酬规则配置,将HR从每月耗时数天的手工算薪中解放出来,准确率提升至99.9%以上。 为什么2026年还…...

标普油气ETF富国(513350.SH)逆势走强、半导体承压:地缘扰动与产业逻辑共振下的ETF分化走势

4月2日,市场全天震荡调整,创业板指、科创50指数均跌超2%。板块方面,医药板块逆势走强,油气股表现活跃,光纤概念反复走强;算力租赁概念集体调整。ETF方面,标普油气ETF富国(513350.SH&…...

2026 年4月深圳高精度 TOF 传感器,这些推荐值得关注!

随着科技的飞速发展,高精度TOF(Time of Flight)传感器在众多领域的应用越来越广泛。从智能家居到自动驾驶,从工业自动化到医疗成像,TOF传感器的市场需求呈现出爆发式增长。今天,我们就来聊聊2026年值得关注…...

RK Android14 开机自启APP分析与使用

文章目录 前言 一、功能补丁 二、如何使用 1. 应用补丁 2. 设置自启动应用 3. 获取应用包名和Activity 4. 验证 总结 前言 根据客户需要,有时需要设置第三方的apk进行开机自启动。 一、功能补丁 功能分析: 系统启动完成后,自动启动系统属性 persist.sys.start.app 中配置的…...

医疗AI推理可视化卡顿难题(实时渲染延迟>120ms?)——三甲医院PACS系统C++底层优化全链路拆解

第一章:医疗AI推理可视化卡顿难题的临床影响与性能基线定义在放射科、病理科及急诊超声等实时决策场景中,AI模型输出热力图、分割掩码或病灶定位框后,若前端渲染延迟超过300ms,将直接干扰医师对动态影像序列(如心脏搏动…...

OpenClaw日志分析实战:Phi-3-vision-128k-instruct多维度错误模式识别

OpenClaw日志分析实战:Phi-3-vision-128k-instruct多维度错误模式识别 1. 为什么需要智能日志分析 凌晨三点,我被手机警报惊醒——服务器又崩了。揉着惺忪睡眼打开终端,面对满屏的日志文件,那种熟悉的无力感再次袭来。这已经是本…...

复古计算机复兴:OpenClaw+Qwen3-14B驱动命令行工作流

复古计算机复兴:OpenClawQwen3-14B驱动命令行工作流 1. 当AI遇见Unix哲学 我的书桌上至今保留着一台1984年的IBM PC/AT,那厚重的机械键盘和闪烁的绿色光标总能唤起某种仪式感。最近在调试OpenClaw对接Qwen3-14B时,突然意识到:我…...

MS5611高精度气压温度传感器Arduino驱动库

1. 项目概述MS5611-Mike-Refactored 是一款面向嵌入式平台(特别是 Arduino 兼容生态)的 MS5611 高精度气压/温度传感器驱动库。该库并非简单封装,而是对 Korneliusz Jarzebski 原始实现的一次系统性重构与工程化增强。其核心目标是将一个基础…...

mbedBug:面向mbed OS的轻量级嵌入式调试纳米框架

1. mbedBug:面向mbed OS的轻量级嵌入式调试纳米框架1.1 设计定位与工程价值mbedBug并非通用型调试器或完整测试框架,而是一个专为资源受限嵌入式环境裁剪的调试纳米框架(Debug Nanoframework)。其核心设计哲学是“最小侵入、最大可…...

有了这个Python备忘录,代码拿来即用

这段时间代码写的少了,周末用python写一个小爬虫,却发现连线程的一些方法都不记得了,还得百度查教程。工作越忙,记性越差,发现我疏远了代码,代码也疏远了我。 PS:对于小白来说自学也不是件容易…...

OpenClaw跨平台控制:Kimi-VL-A3B-Thinking远程执行多模态任务方案

OpenClaw跨平台控制:Kimi-VL-A3B-Thinking远程执行多模态任务方案 1. 为什么需要跨平台远程控制? 上周五晚上11点,我正躺在沙发上刷手机,突然想起有个紧急的竞品分析报告需要处理。电脑在书房,实在懒得起身。这时我意…...

东华OJ-基础题-33-数字之和(C++)

问题描述 输入一个正整数,求这个正整数的各位数字之和。输入说明 你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组测试数据为正整数,每行一个N,N小于20000输出说明 对每组测试数据,你的程…...

TimesFM时间序列预测模型实战:从基础模型到高效部署的完整路径

TimesFM时间序列预测模型实战:从基础模型到高效部署的完整路径 【免费下载链接】timesfm TimesFM (Time Series Foundation Model) is a pretrained time-series foundation model developed by Google Research for time-series forecasting. 项目地址: https://…...

快捷键失灵?让Hotkey Detective揪出幕后“键盘小偷“——专业级Windows热键冲突解决方案

快捷键失灵?让Hotkey Detective揪出幕后"键盘小偷"——专业级Windows热键冲突解决方案 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_m…...

2025_NIPS_RT V-Bench: Benchmarking MLLM Continuous Perception, Understanding and Reasoning through R

文章主要内容与创新点总结 一、主要内容 本文针对现有基准测试无法充分评估多模态大语言模型(MLLMs)在动态真实环境中持续感知、理解和推理能力的问题,提出了实时视频分析基准测试集RT V-Bench。该基准包含552个多样化视频(总时长167.2小时)和4631个高质量问答对,涵盖智…...

3 个高级思路,让你的 AI 绘画 / 视频从此充满想象力

前言 如今 AI 视频与绘画工具的画质越来越卷,清晰度、光影、细节几乎都已触达天花板。但真正能让人记住、能脱颖而出的作品,靠的从来不是画质,而是想象力。 当所有人都在追求 “大片感” 时,你只需要换一种思路 ——用创意打破平…...

Spring IoC 与 DI 核心详解 —— 基于 XML 配置:Bean 创建、依赖注入与生命周期全解析(Spring系列1)

在 Java 企业级开发中,Spring 框架凭借其强大的 IoC(控制反转) 与 DI(依赖注入) 能力,成为了事实上的标准。本文将带你从最原始的 XML 配置开始,逐步过渡到纯注解开发,并深入剖析 Io…...

ReactNative项目OpenHarmony三方库集成实战:react-native-render-html

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net 项目基于 RN 0.72.90 开发 📋 前言 在移动应用开发中,HTML 内容渲染是一项常见需求,特别是在新闻资讯、富文本编辑、邮件展示等场景中。React Native 原…...

状态机中的人物状态

一,人物惯性移动using System.Collections; using System.Collections.Generic; using UnityEngine;public class CharMove3 : MonoBehaviour {public Transform charTrans; //角色坐标public Vector3 currentVelocity; //当前速度public float maxSpeed; //最大速率…...

Diablo Edit2实战解决方案:从存档修复到角色定制的完整指南

Diablo Edit2实战解决方案:从存档修复到角色定制的完整指南 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 在暗黑破坏神II的冒险旅程中,每位玩家都可能遭遇存档损坏、属性…...

新手福音:用快马平台理解openclaw架构图并生成你的第一个应用

新手福音:用快马平台理解openclaw架构图并生成你的第一个应用 作为一个刚入门的开发者,第一次看到openclaw架构图时,那些方框和箭头让我一头雾水。直到在InsCode(快马)平台上动手实践后,才发现原来架构图可以这么直观。下面分享我…...

关于eclipse2019中导入克隆的web项目

分为导入项目和排查可能错误两个方面前言:本文主要总结个人在完成需要合作完成学习项目时,使用共享项目文件时“环境”问题导致的无法“跑通”,为此忙碌很久和豆包进行了“深入聊天”。决定对自己的问题进行总结,方便自己以后阅读…...

小红书内容保存难题,这款Python工具如何实现一键无水印下载?

小红书内容保存难题,这款Python工具如何实现一键无水印下载? 【免费下载链接】XHS-Downloader 小红书(XiaoHongShu、RedNote)链接提取/作品采集工具:提取账号发布、收藏、点赞、专辑作品链接;提取搜索结果作…...

基于YOLOv8深度学习的电梯内电动车检测系统(YOLOv8+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 项目摘要 随着城市化进程的加速,电梯已成为现代建筑中不可或缺的垂直交通工具。然而,电动车进入电梯并违规充电引发的火灾事故频发,对人民生命财产安全构成严重威胁。为解决这一问题,本系统基于YOLOv8深度学习算法…...

rk3576(5)之设备树下GPIO驱动

1、简介rk3576buildroot设备树GPIO驱动编写。个人理解设备树就相当于存在统一规则、统一管理的头文件,记录了开发板的设备信息。2、设备树语法2.1、dtsi 头文件设备树也支持头文件,设备树的头文件扩展名为.dtsi设备树文件不仅可以应用 C 语言里面的.h 头…...