深入理解二叉树构建和中序遍历

在计算机科学中,二叉树是一种重要的数据结构,用于模拟层次化结构的关系。本文将介绍一个简单的C语言程序,该程序实现了对输入字符数组的解析,并构建相应的二叉树,随后对二叉树进行中序遍历。

二叉树定义

首先,让我们来看一下程序中使用的二叉树节点的定义。在C语言中,可以通过结构体来定义二叉树节点:

typedef struct TreeNode{ char val; struct TreeNode* left; struct TreeNode* right; 
} TreeNode;

这里,TreeNode 结构体定义了二叉树节点的结构,包括值 val 和左右子节点指针。

二叉树构建

接下来,让我们看一下程序中的 maketree 函数,该函数负责构建二叉树。函数的原型如下:

TreeNode* maketree(char* arr, int* count);

maketree 函数通过递归方式构建二叉树,根据输入的字符数组来创建对应的二叉树节点。具体实现如下:

 
TreeNode* maketree(char* arr, int* count){ 
if (arr[*count] == '#' || arr[*count] == '\0'){ return NULL; } 
TreeNode* newnode = (TreeNode*)malloc(sizeof(TreeNode));newnode->val = arr[(*count)++]; 
newnode->left = maketree(arr, count); 
(*count)++; newnode->right = maketree(arr, count);return newnode; 
}

中序遍历

程序中还包含了一个 Inorder 函数,用于实现二叉树的中序遍历。中序遍历按照左子树-根节点-右子树的顺序输出节点的值。

void Inorder(TreeNode* root) 
{ if (root == NULL) { return; } Inorder(root->left); printf("%c ", root->val);Inorder(root->right); 
}

主函数

最后,程序的主函数负责整个流程的控制。它首先读取输入的字符数组,然后调用 maketree 函数构建二叉树,最后调用 Inorder 函数对构建好的二叉树进行中序遍历并输出结果。

int main(){char arr[101];scanf("%s", arr); int count = 0; TreeNode* tree = maketree(arr, &count); Inorder(tree); return 0; 
}

示例

假设输入字符数组为 "ABD##E##C##",则对应的二叉树结构如下所示:

 

总结

通过这个简单的C语言程序,我们深入理解了二叉树的构建和中序遍历。二叉树作为一种重要的数据结构,在计算机科学领域有着广泛的应用,深入理解和掌握二叉树的相关操作对于编程能力的提升具有重要意义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761082.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis监控工具

Redis 是一种 NoSQL 数据库系统,以其速度、性能和灵活的数据结构而闻名。Redis 在许多领域都表现出色,包括缓存、会话管理、游戏、排行榜、实时分析、地理空间、叫车、聊天/消息、媒体流和发布/订阅应用程序。Redis 数据集完全存储在内存中,这…

揭秘爆红AI图像增强神器:Magnific AI如何做到1亿像素放大?

最近有个很火的AI图像增强应用,叫Magnific AI。 你知道吗,它发布一个多月就有40万人注册了! 这个应用确实非常实用,它不仅利用AI技术放大了图像,还能提升分辨率,从而使图片呈现得更加清晰。 值得一提的是…

扩展以太网(数据链路层)

目录 一、在物理层扩展以太网 二、在数据链路层扩展以太网 三、以太网交换机的特点 四、以太网交换机的交换方式 五、以太网交换机的自学习功能 六、小结 一、在物理层扩展以太网 使用光纤扩展: • 主机使用光纤(通常是一对光纤)和…

跨境电商商品数据集爬取方案|跨境电商商品采集API接口

跨境电商数据集介绍 我们就以电商商品的数据集作为依托,从而来了解什么是数据集,可以通过什么方式来进行数据集的获取。 什么是数据集 电商商品数据集通常是指收集自电子商务平台的商品信息的结构化数据集合。这些数据包括但不限于商品名称、价格、描…

有关Theano和PyTensor库

根据Github里面的介绍,PyTensor是源于Theano, Theano目前应该已经不再开发了,更新都是很多年前。 因此PyTensor在背景介绍中说 PyTensor is a fork of Aesara, which is a fork of Theano. Theano和PyTensor都是计算相关的库,可以…

数据结构面试常见问题之- Sort with Swap(0,*)

😀前言 在数据结构面试中,排序算法是考察重点之一。传统的排序算法,例如冒泡排序、快速排序等,都依赖于元素之间的比较和交换操作。然而,在某些情况下,我们可能只允许使用特定的交换操作,例如只…

【网络原理】详解HTTPS协议加密过程

文章目录 🌴HTTPS协议是什么?🎄运营商劫持事件🌲HTTPS的工作过程🌸对称加密🌸非对称加密🌸引入证书🌸完整流程 🌳HTTPS加密总结⭕总结 🌴HTTPS协议是什么&…

Spring Cloud Alibaba微服务从入门到进阶(七)(服务容错-Sentinel)

雪崩效应 我们把基础服务故障,导致上层服务故障,并且这个故障不断放大的过程,成为雪崩效应。 雪崩效应,往往是因为服务没有做好容错造成的。 微服务常见容错方案 仓壁模式 比如让controller有自己独立的线程池,线程池满…

Windows 设置多显示器显示

Windows 设置多显示器显示 1. Windows 7 设置 HDMI 输出2. Windows 11 设置多显示器显示References 1. Windows 7 设置 HDMI 输出 2. Windows 11 设置多显示器显示 ​​​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

畅谈AIGC,ISIG-AIGC技术与应用发展峰会成功举办

3月16日,第四届ISIG中国产业智能大会在上海中庚聚龙酒店如期开幕,此次大会由苏州市金融科技协会指导、企智未来科技(RPA中国、LowCode低码时代、AIGC开放社区)主办。大会聚集了来自不同领域的专家学者、行业领军人物及技术研发者&…

Linux系统——nload命令

目录 引言 一、nload安装 二、nload命令详解 1.命令使用 2.命令详解 3.命令选项 3.1-u选项 nload -u h 自动变更单位,Bit/s nload -u H 自动变更单位,Byte/s 3.2-m选项 nload -m 不显示流量图 nload -m -H ens33 不显示流量图,以By…

深度学习训练前标准的LMDB文件(data.mdb和lock.mdb)制作(附代码)

目录 一、LMDB文件二、准备训练集三、安装basicsr包四、LMDB文件制作4.1 参数修改4.2 其它格式图片修改4.3 代码4.4 转换结果4.4.1 data.mdb文件4.4.2 lock.mdb文件4.4.3 meta_info.txt文件 五、总结 一、LMDB文件 在训练的时候使用LMDB 存储形式可以加快IO 和CPU 解压缩的速度…

点餐小程序开发:如何通过抽奖与消费者互动

随着科技的发展,越来越多的商家开始使用点餐小程序来提升自己的服务质量和效率。然而,仅仅提供点餐服务并不能满足消费者的需求,他们还需要一种方式来增加与商家的互动,提高消费体验。抽奖活动就是一种非常有效的互动方式&#xf…

FreeRTOS 消息队列

1. 队列简介 1.1 队列的概念 队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递) 类似全局变量?假设有一个全局变量a 0,现有两个任务都在写这个变量 a: 大家想象一下如果任务 1 运行一次&#…

[NOIP1998 提高组] 拼数

[NOIP1998 提高组] 拼数 题目描述 设有 n n n 个正整数 a 1 … a n a_1 \dots a_n a1​…an​,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。 输入格式 第一行有一个整数,表示数字个数 n n n。 第二行有 n n …

一些刷题需要用的大数据

无符号版本和有符号版本的区别就是有符号类型需要使用一个bit来表示数字的正负。 如果需声明无符号类型的话就需要在类型前加上unsigned。 整型的每一种都分为:无符号(unsigned)和有符号(signed)两种类型(f…

Day76:WEB攻防-Fuzz模糊测试篇JS算法口令隐藏参数盲Payload未知文件目录

目录 Fuzz技术-用户口令-常规&模块&JS插件 无验证码密码明文 无验证码密码弱加密(MD5) 无验证码密码复杂加密(通过js文件进行加密) Fuzz技术-目录文件-目录探针&文件探针 Fuzz技术-未知参数名-文件参数&隐藏参数 Fuzz技术-构造参数值-漏洞攻击恶意Paylo…

分布式之Skywalking

Skywalking skywalking是一个apm系统,包含监控,追踪,并拥有故障诊断能力的 分布式系统 一、Skywalking介绍 1.什么是SkyWalking Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin /Pinpoint …

Anaconda安装 (windowsLinux)

文章目录 Anaconda简介设置国内源pip || conda 一、Anaconda (Windows系统)1.1 下载及安装1.2 虚拟环境创建1.3 在Pycharm中配置conda的环境 二、Anaconda(Linux系统) Anaconda简介 conda是一个开源的包、环境管理器,可…