发布时间:2026/8/6 2:49:33
二叉树前中后序遍历 二叉树前中后序遍历 - 代码实现思路与图解1. 项目概述本项目实现了二叉树的三种遍历方式前序遍历、中序遍历和后序遍历均采用递归实现。2. 数据结构定义2.1 二叉树节点结构typedefcharBTDataType;typedefstructBinaryTreeNode{structBinaryTreeNode*left;// 指向左孩子的指针structBinaryTreeNode*right;// 指向右孩子的指针BTDataType data;// 数据元素}BTNode;结构说明data存储节点数据字符类型left指向左子节点的指针right指向右子节点的指针3. 二叉树构建过程3.1 手动构造二叉树BTNode*CreateTree(){BTNode*nodeaBuyBTNode(a);BTNode*nodebBuyBTNode(b);BTNode*nodecBuyBTNode(c);BTNode*nodedBuyBTNode(d);BTNode*nodeeBuyBTNode(e);BTNode*nodefBuyBTNode(f);nodea-leftnodeb;nodea-rightnodec;nodeb-leftnoded;nodeb-rightnodee;nodec-rightnodef;returnnodea;}3.2 构造的二叉树结构a / \ b c / \ \ d e f4. 遍历实现思路4.1 前序遍历Pre-order Traversal访问顺序根节点 → 左子树 → 右子树voidPreorder(BTNode*root){if(rootNULL){printf(NULL );return;}printf(%c ,root-data);// 1. 访问根节点Preorder(root-left);// 2. 递归遍历左子树Preorder(root-right);// 3. 递归遍历右子树}前序遍历结果a b d e c f4.2 中序遍历In-order Traversal访问顺序左子树 → 根节点 → 右子树voidInorder(BTNode*root){if(rootNULL){printf(NULL );return;}Inorder(root-left);// 1. 递归遍历左子树printf(%c ,root-data);// 2. 访问根节点Inorder(root-right);// 3. 递归遍历右子树}中序遍历结果d b e a c f4.3 后序遍历Post-order Traversal访问顺序左子树 → 右子树 → 根节点voidPostorder(BTNode*root){if(rootNULL){printf(NULL );return;}Postorder(root-left);// 1. 递归遍历左子树Postorder(root-right);// 2. 递归遍历右子树printf(%c ,root-data);// 3. 访问根节点}后序遍历结果d e b f c a5. 递归执行过程图解5.1 前序遍历递归展开图Preorder(a) ├── printf(a ) // 访问根节点a ├── Preorder(b) │ ├── printf(b ) // 访问节点b │ ├── Preorder(d) │ │ ├── printf(d ) // 访问叶子节点d │ │ ├── Preorder(NULL) → 打印NULL并返回 │ │ └── Preorder(NULL) → 打印NULL并返回 │ └── Preorder(e) │ ├── printf(e ) // 访问叶子节点e │ ├── Preorder(NULL) → 打印NULL并返回 │ └── Preorder(NULL) → 打印NULL并返回 └── Preorder(c) ├── printf(c ) // 访问节点c ├── Preorder(NULL) → 打印NULL并返回 └── Preorder(f) ├── printf(f ) // 访问叶子节点f ├── Preorder(NULL) → 打印NULL并返回 └── Preorder(NULL) → 打印NULL并返回输出结果a b d NULL NULL e NULL NULL c NULL f NULL NULL5.2 中序遍历递归展开图Inorder(a) ├── Inorder(b) │ ├── Inorder(d) │ │ ├── Inorder(NULL) → 打印NULL并返回 │ │ ├── printf(d ) // 访问叶子节点d │ │ └── Inorder(NULL) → 打印NULL并返回 │ ├── printf(b ) // 访问节点b │ └── Inorder(e) │ ├── Inorder(NULL) → 打印NULL并返回 │ ├── printf(e ) // 访问叶子节点e │ └── Inorder(NULL) → 打印NULL并返回 ├── printf(a ) // 访问根节点a └── Inorder(c) ├── Inorder(NULL) → 打印NULL并返回 ├── printf(c ) // 访问节点c └── Inorder(f) ├── Inorder(NULL) → 打印NULL并返回 ├── printf(f ) // 访问叶子节点f └── Inorder(NULL) → 打印NULL并返回输出结果NULL d NULL b NULL e NULL a NULL c NULL f NULL5.3 后序遍历递归展开图Postorder(a) ├── Postorder(b) │ ├── Postorder(d) │ │ ├── Postorder(NULL) → 打印NULL并返回 │ │ ├── Postorder(NULL) → 打印NULL并返回 │ │ └── printf(d ) // 访问叶子节点d │ ├── Postorder(e) │ │ ├── Postorder(NULL) → 打印NULL并返回 │ │ ├── Postorder(NULL) → 打印NULL并返回 │ │ └── printf(e ) // 访问叶子节点e │ └── printf(b ) // 访问节点b ├── Postorder(c) │ ├── Postorder(NULL) → 打印NULL并返回 │ ├── Postorder(f) │ │ ├── Postorder(NULL) → 打印NULL并返回 │ │ ├── Postorder(NULL) → 打印NULL并返回 │ │ └── printf(f ) // 访问叶子节点f │ └── printf(c ) // 访问节点c └── printf(a ) // 访问根节点a输出结果NULL NULL d NULL NULL e b NULL NULL f c a6. 核心要点总结6.1 递归三要素递归终止条件节点为空时停止当前层操作打印节点数据递归调用分别调用左子树和右子树的遍历函数6.2 三种遍历的区别遍历方式访问顺序输出结果前序遍历根→左→右a b d e c f中序遍历左→根→右d b e a c f后序遍历左→右→根d e b f c a6.3 时间复杂度分析时间复杂度O(n)每个节点恰好被访问一次空间复杂度O(h)递归栈的深度h为树的高度7. 代码优化建议去掉NULL打印实际应用中通常不需要打印NULL非递归实现使用栈模拟递归过程层序遍历使用队列实现广度优先遍历文档说明本文档基于代码实现详细解释了二叉树三种遍历方式的递归思路和执行过程。

相关新闻

2026/8/6 2:49:33

信守不渝,以过程受控保障结果可靠

对于电力设备用绝缘部件,任何一次质量事故都可能导致灾难性的运行故障。因此,质量管理体系的有效性,是我们在选择供应商时最核心的考察红线。我们深度审查了所有候选供应商的质量文件,并进行了多次突击现场审核。结果令人担忧&…

2026/8/6 3:49:38

10分钟打造专属AI音色:RVC语音变声完全指南

10分钟打造专属AI音色&#xff1a;RVC语音变声完全指南 【免费下载链接】Retrieval-based-Voice-Conversion-WebUI Easily train a good VC model with voice data < 10 mins! 项目地址: https://gitcode.com/GitHub_Trending/re/Retrieval-based-Voice-Conversion-WebUI …

2026/8/6 3:49:38

C++/CLI实战指南:打通C++与.NET的桥梁技术

1. 项目概述&#xff1a;为什么今天还要聊C/CLI&#xff1f;如果你是一位长期在Windows平台上耕耘的C开发者&#xff0c;或者是一个需要将庞大的遗留C代码库与现代的.NET应用&#xff08;比如C#写的WPF界面或ASP.NET后端&#xff09;进行集成的工程师&#xff0c;那么“C/CLI”…

2026/8/6 3:44:38

认知思维导图生成器

认知思维导图生成器&#xff08;Cognitive Mindmap Generator&#xff09; 对外白皮书&#xff08;v2.0&#xff09;让机器“读懂”文本&#xff0c;让知识“长出”结构 —— 基于认知引擎与注意力机制的智能语义可视化平台一、背景与问题 在信息爆炸的时代&#xff0c;海量文本…

2026/8/5 3:13:11

如何用免费工具突破游戏窗口限制:SRWE完整使用指南

如何用免费工具突破游戏窗口限制&#xff1a;SRWE完整使用指南 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE 你是否遇到过这样的困扰&#xff1f;想为心爱的游戏截图&#xff0c;却发现游戏不支持自定义分辨率…

2026/8/6 0:04:22

电力系统调度中的源荷不确定性建模与优化实践

1. 电力系统调度中的源荷不确定性挑战现代电力系统正面临前所未有的复杂性&#xff0c;其中源荷不确定性&#xff08;Source-Load Uncertainty&#xff09;已成为调度决策中最棘手的难题之一。我在参与某省级电网调度系统升级时&#xff0c;曾遇到风电预测误差导致日内调度计划…

2026/8/6 0:04:22

VGG-T3技术解析:3D重建速度的革命性突破

1. 项目概述&#xff1a;VGG-T3如何重新定义3D重建速度在计算机视觉领域&#xff0c;3D场景重建一直是个计算密集型任务。传统方法重建1000帧图像规模的场景往往需要数小时甚至更长时间&#xff0c;而英伟达最新发布的VGG-T3技术将这个时间压缩到了惊人的54秒。这个突破性进展来…

2026/8/6 0:04:22

深度解析旅游网站建设的意义及其对行业发展的深远影响与核心价值体现

在这个数字化浪潮席卷全球的今天,我们似乎已经忘记了,曾经有一段时间,人们想要去一个陌生的地方,只能靠在书桌前翻阅厚厚的旅游杂志,或者向刚从那里回来的朋友询问那些模糊不清的印象。那时候,“远方”是一个需要精打细算才能抵达的奢侈概念。而现在,只需要一部手机,轻…

2026/8/5 19:21:13

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/5 19:21:13

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/5 19:21:13

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版等核心场景&#xff0c;真正帮你高效搞定论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首…