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

在计算机科学中,二叉树是一种重要的数据结构,用于模拟层次化结构的关系。本文将介绍一个简单的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协议是什么&…

Kafka主题二三事

客户端如果订阅了多次主题,则以最后一次为主,例如 consumer.subscribe(Arrays.asList(topic1)); consumer.subscribe(Arrays.asList(topic2)); 则订阅的只有topic2。 消费者订阅主题是支持正则表达式,这样如果有新topic上线,并且匹…

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

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

SQL语句每日一练二

1.给出 Customers 表 如下: cust_idcust_namecust_contactcust_citya1Andy LiAndy LiOak Parka2Ben LiuBen LiuOak Parka3Tony DaiTony DaiOak Parka4Tom ChenTom ChenOak Parka5An LiAn LiOak Parka6Lee ChenLee ChenOak Parka7Hex LiuHex LiuOak Park 【问题】编…

【快速幂、欧拉函数】蓝桥杯第十四届---互质数的个数

给定 a, b&#xff0c;求 1 ≤ x < a^b 中有多少个 x 与 a^b 互质。由于答案可能很大&#xff0c;你只需要输出答案对 998244353 取模的结果。 输入格式 输入一行包含两个整数分别表示 a, b&#xff0c;用一个空格分隔。 输出格式 输出一行包含一个整数表示答案。 样例…

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

Linux系统——nload命令

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

c++的学习之路:1、学习前言

一、什么是c C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的程序&#xff0c;需要高度的抽象和建模时&#xff0c;C语言则不合适。为了解决软件危机&#xff0c; 20世纪80年代&#xff0c; 计算机界提出了OOP(object …

[AIGC] OkHttp:轻松实现网络请求

OkHttp&#xff1a;轻松实现网络请求 当我们需要在应用程序中进行HTTP网络请求时&#xff0c;Java的标准库可以提供基本的功能&#xff0c;但使用起来却不那么方便。OkHttp是一款开源的网络请求库&#xff0c;它能够简化网络请求的工作&#xff0c;提高了工作效率。我们将从&q…

<sa8650>sa8650 memory-之-内存参数分析

<sa8650>sa8650 memory-之-内存参数分析 1、前言2、内存分解 (Memory Breakdown)3、QNX 分割堆( QNX Carveout Heaps)4、主要分割方案说明--深入了解 QNX 分割方案(Description of Major Carveouts – Deep Dive on QNX Carveouts)5、配置内存分区大小(Configure Memory Pa…

深度学习训练前标准的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 解压缩的速度…

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

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