二叉树的创建、遍历及销毁

news/2024/10/4 11:37:45/

头文件:link_tree.h

#ifndef __LINK_TREE_H__
#define __LINK_TREE_H__
#include <stdio.h>
#include <stdlib.h>
typedef char datatype;//类型重定义
typedef struct tree_node
{datatype data;//数据域,存储数据struct tree_node *left;//存放链式二叉树左节点的指针struct tree_node *right;//存放链式二叉树右节点的指针
}tree_node,*node_p;
node_p create_tree();//创建链式二叉树
void show_first(node_p T);//先序遍历
void show_middle(node_p T);//中序遍历
void show_behind(node_p T);//后序遍历
void destroyTree(node_p T);//销毁链式二叉树
#endif

功能函数:link_tree.c

#include "link_tree.h"
//创建链式二叉树
node_p create_tree()
{datatype data;scanf("%c",&data);if(data == '#')//设定一个值来判断是不是要继续创建左右子树{return NULL;}//从堆区申请空间存放链表节点node_p T=(node_p)malloc(sizeof(tree_node));if(NULL == T){printf("链表节点创建失败!\n");return NULL;}T->data=data;//存放数据域T->left=create_tree();//递归创建左子树T->right=create_tree();//递归创建右子树return T;
}
//先序遍历(根->左->右)
void show_first(node_p T)
{if(NULL == T){return;}printf("%c ",T->data);//先输出根节点show_first(T->left);//递归输出左子树节点show_first(T->right);//递归输出右子树节点
}
//中序遍历(左->根->右)
void show_middle(node_p T)
{if(NULL == T){return;}show_middle(T->left);//递归输出左子树节点printf("%c ",T->data);//输出根节点show_middle(T->right);//递归输出右子树节点
}
//后序遍历(左->右->根)
void show_behind(node_p T)
{if(NULL == T){return;}show_middle(T->left);//递归输出左子树节点show_middle(T->right);//递归输出右子树节点printf("%c ",T->data);//输出根节点
}
//销毁二叉树
void destroyTree(node_p T){if (T == NULL) {return;}// 递归销毁左子树destroyTree(T->left);// 递归销毁右子树destroyTree(T->right);// 释放当前节点的内存free(T);
}

主函数:main.c

#include "link_tree.h"int main(int argc, const char *argv[])
{node_p T=create_tree();//创建二叉树show_first(T);//先序遍历printf("\n");show_middle(T);//中序遍历printf("\n");show_behind(T);//后序遍历printf("\n");destroyTree(T);//销毁二叉树return 0;
}


http://www.ppmy.cn/news/1534389.html

相关文章

【游戏模组】星际争霸1代模组燃烧之地,泰伦帝国对决UED。特效华丽兵种巨多特别好玩

各位星际争霸1代的粉丝大家好&#xff0c;今天小编给大家带来一个星际争霸1代的模组&#xff0c;这个模组的名字叫燃烧之地&#xff0c;主要是2个阵营。玩家可以扮演UED或者泰伦帝国中的一个来进行比赛。 这个模组设定的世界线背景是在异虫入侵并随后被星灵消灭后&#xff0c;…

以太网交换安全:端口安全

一、端口安全介绍 端口安全是一种网络设备防护措施&#xff0c;通过将接口学习到的动态MAC地址转换为安全MAC地址&#xff08;包括安全动态MAC和Sticky MAC&#xff09;&#xff0c;阻止除安全MAC和静态MAC之外的主机通过本接口和设备通信&#xff0c;从而增强设备的安全性。以…

go基础面试题汇总第一弹

init函数是什么时候执行的? init的函数的作用是什么&#xff1f; 通常作为程序执行前包的初始化&#xff0c;例如mysql redis 等中间件的初始化 init函数的执行顺序是怎样的&#xff1f; 分不同情况来回答&#xff1a; 在同一个go文件里面如果有多个init方法&#xff0c;它们…

IDEA在git提交时添加忽略文件

在IntelliJ IDEA中&#xff0c;要忽略target目录下所有文件的Git提交&#xff0c;你可以通过设置.gitignore文件来实现。以下是步骤和示例代码&#xff1a; 1、打开项目根目录下的.gitignore文件。也可以先下载这个.ignore插件。 2、如果不存在&#xff0c;利用上面的插件新建…

ElasticSearch备考 -- 多字段查询

一、题目 索引task有3个字段a、b、c&#xff0c;写一个查询去匹配这三个字段为mom&#xff0c;其中b的字段评分比a、c字段大一倍&#xff0c;将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询&#xff0c;可以考虑multi match、bool query操作。…

从0学习React(5)---通过例子体会setState

上篇文章中&#xff0c;我们讲到了通过setState来更新组件的状态。我觉得上篇文章我讲的已经是比较详细的了&#xff0c;而且讲的很通俗易懂。但是上篇文章终归还是理论&#xff0c;没有实践&#xff0c;所以还是学了个表面而已。这篇文章我就结合一点实践来讲讲怎么使用这个se…

Spring Boot 进阶-Spring Boot 开发第一个Web接口

在前面的文章中我们对Spring Boot的配置以及日志配置有了大概的了解,在我们搭建完成第一个Spring Boot项目之后也提到了一个概念就是RestFul风格的接口开发。下面我们就来详细介绍一下使用Spring Boot如何去开发一个RestFul的Web接口。 准备 在开发接口之前,需要引入的就是W…

鸿蒙harmonyos next纯flutter开发环境搭建

公司app是用纯flutter开发的&#xff0c;目前支持android和iOS&#xff0c;后续估计也会支持鸿蒙harmonyos。目前谷歌flutter并没有支持咱们国产手机操作系统鸿蒙harmonyos&#xff0c;于是乎国内有个叫OpenHarmony-SIG的组织&#xff0c;去做了鸿蒙harmonyos适配flutter开发的…