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

数据结构(c语言版本) 二叉树的遍历

要求

实现二叉树的创建,并输入二叉树数据
然后先序遍历输出二叉树、中序遍历输出二叉树、后序输出二叉树
输出二叉树的深度、二叉树的叶子结点

例如二叉树为:
在这里插入图片描述
该二叉树的先序遍历结果为:

A B D C E F

该二叉树的中序遍历结果为:

B D A E C F

该二叉树的后序遍历结果为:

D B E F C A

该二叉树的深度为:

3

该二叉树的叶子结点为:

D E F

代码实现

#include <stdio.h>
#include <malloc.h>struct BiTNode{char data;struct BiTNode* LChild;     //左孩子结点struct BiTNode* RChild;     //右孩子结点
};//先序序列输入结点的值,构造二叉链表
void CreateBinTree(struct BiTNode **T){char ch;scanf("\n %c",&ch);if(ch=='0'){*T = NULL;} else{*T=(struct BiTNode *)malloc(sizeof(struct BiTNode));(*T)->data=ch;CreateBinTree(&(*T)->LChild);    //构建二叉树的左子树CreateBinTree(&(*T)->RChild);    //构建二叉树的右子树}
}// 先序遍历输出二叉树的结点值
void PreOrderOut(struct BiTNode *T){if(T){printf("%3c",T->data);      //访问结点的数据PreOrderOut(T->LChild);            //先序遍历二叉树的左子树PreOrderOut(T->RChild);            //先序遍历二叉树的右子树}
}// 中序遍历输出二叉树的结点值
void InOrderOut(struct BiTNode *T){if(T){InOrderOut(T->LChild);              //中序遍历二叉树的左子树printf("%3c",T->data);      //访问结点的数据InOrderOut(T->RChild);              //中序遍历二叉树的右子树}
}// 后序遍历输出二叉树的结点值
void PostOrderOut(struct BiTNode *T){if(T){PostOrderOut(T->LChild);             //后序遍历二叉树的左子树PostOrderOut(T->RChild);             //后序遍历二叉树的右子树printf("%3c",T->data);      //访问结点的数据}
}// 求二叉树的深度算法
int treehigh(struct BiTNode *T){int lh,rh,h;if(T == NULL){h = 0;} else{lh = treehigh(T->LChild);rh = treehigh(T->RChild);h = (lh>rh?lh:rh)+1;}return h;
}// 求二叉树的叶子结点
void inorder_leaf(struct BiTNode *T){if(T !=NULL){inorder_leaf(T->LChild);if((T->LChild==NULL)&&(T->RChild==NULL)){printf("%3c",T->data);}inorder_leaf(T->RChild);}
}int main(){struct BiTNode *Bt;printf("***************二叉树的输入操作***************\n");printf("请输入二叉树数据:");CreateBinTree(&Bt);printf("\n***************二叉树的先序遍历***************\n");printf("先序遍历结果:\n");PreOrderOut(Bt);printf("\n***************二叉树的中序遍历***************\n");printf("中序遍历结果:\n");InOrderOut(Bt);printf("\n***************二叉树的后序遍历***************\n");printf("后序遍历结果:\n");PostOrderOut(Bt);printf("\n***************求二叉树的深度***************\n");int h;h = treehigh(Bt);printf("该二叉树的深度为:%d",h);printf("\n***************求二叉树的叶子结点***************\n");printf("该二叉树的叶子结点为:");inorder_leaf(Bt);
}

输入二叉树(以先序序列输入为例)的数据:

A B 0 D 0 0 C E 0 0 F 0 0

运行结果

在这里插入图片描述

相关文章:

数据结构(c语言版本) 二叉树的遍历

要求 实现二叉树的创建&#xff0c;并输入二叉树数据 然后先序遍历输出二叉树、中序遍历输出二叉树、后序输出二叉树 输出二叉树的深度、二叉树的叶子结点 例如二叉树为&#xff1a; 该二叉树的先序遍历结果为&#xff1a; A B D C E F 该二叉树的中序遍历结果为&#xff1a…...

Django 配置 Email Admin 详细指南

概要 Django 是一个高级的 Python Web 框架&#xff0c;它鼓励快速开发和清洁、实用的设计。当你正在开发一个 Django 项目时&#xff0c;监控网站的运行情况是非常必要的。Django 提供了一个功能强大的 admin 界面&#xff0c;但同时也可以通过配置 email admin 来获取网站的…...

Apache阿帕奇安装配置

目录 一、下载程序 1. 点击Download 2. 点击Files for Microsoft Windows 3. 点击Apache Lounge 4. 点击httpd-2.4.54-win64-VSI6.zip ​5. 下载压缩包 6.解压到文件夹里 二、配置环境变量 1. 右键我的电脑 - 属性 2. 高级系统设置 3. 点击环境变量 4. 点击系统变…...

时间序列预测实战(十六)PyTorch实现GRU-FCN模型长期预测并可视化结果

往期回顾&#xff1a;时间序列预测专栏——包含上百种时间序列模型带你从入门到精通时间序列预测 一、本文介绍 本文讲解的实战内容是GRU-FCN(门控循环单元-全卷积网络)&#xff0c;这是一种结合了GRU&#xff08;用于处理时间序列数据&#xff09;和FCN&#xff08;全卷积网络…...

如何提升软件测试效率?本文为你揭示秘密

在软件开发中&#xff0c;测试是至关重要的一个环节。它能帮助我们发现并修复问题&#xff0c;从而确保我们提供的软件具有高质量。然而&#xff0c;测试过程往往费时费力。那么&#xff0c;有没有方法可以提升我们的软件测试效率呢&#xff1f;答案是肯定的。下面&#xff0c;…...

参数估计和非参数估计

一、参数估计 参数估计是统计学中的一个重要概念&#xff0c;它涉及到使用样本数据来估计总体参数的过程。在统计学中&#xff0c;总体是指研究对象的整体集合&#xff0c;而样本是从总体中抽取的部分元素。 参数估计有两种主要方法&#xff1a;点估计和区间估计。 点估计&am…...

Apache Airflow (八) :DAG任务依赖设置

&#x1f3e1; 个人主页&#xff1a;IT贫道_大数据OLAP体系技术栈,Apache Doris,Clickhouse 技术-CSDN博客 &#x1f6a9; 私聊博主&#xff1a;加入大数据技术讨论群聊&#xff0c;获取更多大数据资料。 &#x1f514; 博主个人B栈地址&#xff1a;豹哥教你大数据的个人空间-豹…...

使用 com.jacob.activeX 库实现 Word 到 PDF

使用 com.jacob.activeX 库实现 Word 到 PDF 的转换涉及到使用 Java 和 Microsoft Office 的 COM 自动化。JACOB&#xff08;Java COM Bridge&#xff09;库提供了一个桥接器&#xff0c;允许 Java 代码通过 COM&#xff08;组件对象模型&#xff09;与 Windows 应用程序&#…...

2023亚太杯数学建模思路 - 案例:FPTree-频繁模式树算法

文章目录 算法介绍FP树表示法构建FP树实现代码 建模资料 ## 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模式树算法&#xff0c…...

Dart利用私有构造函数_()创建单例模式

文章目录 类的构造函数_()函数dart中构造函数定义 类的构造函数 类的构造函数有两种&#xff1a; 1&#xff09;默认构造函数&#xff1a; 当实例化对象的时候&#xff0c;会自动调用的函数&#xff0c;构造函数的名称和类的名称相同&#xff0c;在一个类中默认构造函数只能由…...

简述如何使用Androidstudio对文件进行保存和获取文件中的数据

在 Android Studio 中&#xff0c;可以使用以下方法对文件进行保存和获取文件中的数据&#xff1a; 保存文件&#xff1a; 创建一个 File 对象&#xff0c;指定要保存的文件路径和文件名。使用 FileOutputStream 类创建一个文件输出流对象。将需要保存的数据写入文件输出流中…...

面向配电网韧性提升的移动储能预布局与动态调度策略(matlab代码)

欢迎关注威♥“电击小子程高兴的MATLAB小屋”获取更多资料 该程序复现《面向配电网韧性提升的移动储能预布局与动态调度策略》&#xff0c;具体摘要内容见下图&#xff0c;程序主要分为两大模块&#xff0c;第一部分是灾前预防代码&#xff0c;该部分采用两阶段优化算法&#…...

内网信息收集

目录 本机信息收集 查看系统配置信息 查看系统服务信息 查看系统登录信息 自动信息收集 域内信息收集 判断是否存在域 探测域内存主机&端口 powershell arp扫描 小工具 telnet 查看用户&机器&会话相关信息 查看机器相关信息 查看用户相关信息 免费领…...

windows cmd设置代理

https://blog.csdn.net/SHERLOCKSALVATORE/article/details/123599042...

English:small classified word(continuously update)

Distant family members(远亲) grandparents (外)祖父母 grandpa grandma grandchildren (外)孙女 aunt 姑姑 / 婶婶 / 姨 / 舅妈 uncle 叔叔 / 姑父 / 姨父/ 舅舅 niece 侄女 / 外甥女 nephew 侄子 / 外甥 cousin 堂 / 表兄弟姐妹 Appearance&#xff08;外貌&#xff09; …...

JQuery ajax 提交数据提示:Uncaught TypeError:Illegal invocation

JQuery ajax 提交数据提示&#xff1a;Uncaught TypeError:Illegal invocation 1 问题描述 用jQuery Ajax向DRF接口提交数据的时候&#xff0c;console提示&#xff1a;Uncaught TypeError:Illegal invocation(未捕获的异常&#xff1a;非法调用)。 这个问题可能有两种原因导…...

java实现选择排序

算法步骤 首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置再从剩余未排序元素中继续寻找最小&#xff08;大&#xff09;元素&#xff0c;然后放到已排序序列的末尾。重复第二步&#xff0c;直到所有元素均排序完毕。 动图演…...

蓝桥杯 大小写转换

islower/isupper函数 islower和issupper是C标准库中的字符分类函数&#xff0c;用于检查一个字符是否为小写字母或大写字母 需要头文件< cctype>,也可用万能头包含 函数的返回值为bool类型 char ch1A; char ch2b; //使用islower函数判断字符是否为小写字母 if(islower(…...

在誉天学习华为认证,有真机吗

通过培训机构学习华为认证&#xff0c;特别是在HCIE的课程学习中&#xff0c;很多人关心的就是培训机构是否有真机能够进行华为认证的相关实验&#xff0c;今天我们一起来看看&#xff0c;在誉天学习华为认证&#xff0c;有真机吗&#xff1f; 誉天总部数据中心机房和誉天总部一…...

SpringBoot-配置文件properties/yml分析+tomcat最大连接数及最大并发数

SpringBoot配置文件 yaml 中的数据是有序的&#xff0c;properties 中的数据是无序的&#xff0c;在一些需要路径匹配的配置中&#xff0c;顺序就显得尤为重要&#xff08;例如在 Spring Cloud Zuul 中的配置&#xff09;&#xff0c;此时一般采用 yaml。 Properties ①、位…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!

一、引言 在数据驱动的背景下&#xff0c;知识图谱凭借其高效的信息组织能力&#xff0c;正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合&#xff0c;探讨知识图谱开发的实现细节&#xff0c;帮助读者掌握该技术栈在实际项目中的落地方法。 …...

Java求职者面试指南:Spring、Spring Boot、Spring MVC与MyBatis技术解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、Spring MVC与MyBatis技术解析 一、第一轮基础概念问题 1. Spring框架的核心容器是什么&#xff1f;它的作用是什么&#xff1f; Spring框架的核心容器是IoC&#xff08;控制反转&#xff09;容器。它的主要作用是管理对…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型

在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重&#xff0c;适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解&#xff0c;并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...

​​企业大模型服务合规指南:深度解析备案与登记制度​​

伴随AI技术的爆炸式发展&#xff0c;尤其是大模型&#xff08;LLM&#xff09;在各行各业的深度应用和整合&#xff0c;企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者&#xff0c;还是积极拥抱AI转型的传统企业&#xff0c;在面向公众…...

Unity-ECS详解

今天我们来了解Unity最先进的技术——ECS架构&#xff08;EntityComponentSystem&#xff09;。 Unity官方下有源码&#xff0c;我们下载源码后来学习。 ECS 与OOP&#xff08;Object-Oriented Programming&#xff09;对应&#xff0c;ECS是一种完全不同的编程范式与数据架构…...

AI书签管理工具开发全记录(十八):书签导入导出

文章目录 AI书签管理工具开发全记录&#xff08;十八&#xff09;&#xff1a;书签导入导出1.前言 &#x1f4dd;2.书签结构分析 &#x1f4d6;3.书签示例 &#x1f4d1;4.书签文件结构定义描述 &#x1f523;4.1. ​整体文档结构​​4.2. ​核心元素类型​​4.3. ​层级关系4.…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(八)

uboot启动异常及解决 网络问题及解决 打开STM32CubeMX选中ETH1 - A7NS&#xff08;Linux&#xff09;Mode&#xff1a;RGMII&#xff08;Reduced GMII&#xff09;勾选ETH 125MHz Clock Input修改GPIO引脚如图所示 Net: No ethernet found.生成代码后&#xff0c;修改u-boot下…...

SpringBoot+MySQL家政服务平台 设计开发

概述 基于SpringBootMySQL开发的家政服务平台完整项目&#xff0c;该系统实现了用户预约、服务管理、订单统计等核心功能&#xff0c;采用主流技术栈开发&#xff0c;代码规范且易于二次开发。 主要内容 系统功能架构 本系统采用前后端分离架构&#xff0c;前端提供用户交互…...