C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)
今天写的是二叉树操作的实验,这个实验有三个部分:
①建立二叉树,采用二叉链表结构
②先序、中序、后续遍历二叉树,输出节点值
③销毁二叉树
二叉树的节点结构定义
typedef struct BiTNode //二叉树的节点结构
{
char data; //此处用char 因为数据设用字母
struct BiTNode * Lchild, * Rchild; //左右孩子指针
} BiTree;
基本操作函数定义部分
BiTree * CreateBiTree(BiTree * T); //创建二叉树
void PreOrderT(BiTree * T); //先序遍历
void InOrderT(BiTree * T); //中序遍历
void PostOrder(BiTree * T); //后序遍历
void DestroyBiTree(BiTree * T); //销毁二叉树
函数实现部分
BiTree * CreateBiTree(BiTree * T)
{
char ch;
scanf("%c",&ch);
if(ch=='#')
return 0; //输入#表示为空节点
//因为传进来的参数是一个树节点的指针,所以下面这句代码可以理解成实例化该指针指向的树节点
T =(BiTree *)malloc(sizeof(BiTree));
T->data=ch; //给节点的数据域赋值
T->Lchild=CreateBiTree(T->Lchild); //递归创建左子树
T->Rchild=CreateBiTree(T->Rchild); //递归创建右子树
return T;
}
void PreOrderT(BiTree * T)
{
if(T) //如果该树节点存在
{
printf("%c",T->data); //先序遍历
PreOrderT(T->Lchild);
PreOrderT(T->Rchild);
}
}
void InOrderT(BiTree * T)
{
if(T) //如果该树节点存在
{
InOrderT(T->Lchild); //中序遍历
printf("%c",T->data);
InOrderT(T->Rchild);
}
}
void PostOrder(BiTree * T)
{
if(T) //如果该树节点存在
{
PostOrder(T->Lchild);
PostOrder(T->Rchild);
printf("%c",T->data);
}
}
void DestroyBiTree(BiTree * T)
{
if(T) //如果T存在
{
DestroyBiTree(T->Lchild);
DestroyBiTree(T->Rchild);
free(T);
}
}
主函数测试部分
int main(void)
{
BiTree * T; //先定义一个树节点指针,指向第一个树节点,也就是根节点
printf("请输入二叉树的数据,并以#为空节点\n");
T=CreateBiTree(T);
printf("该树的先序遍历结果为:");
PreOrderT(T);
printf("\n");
printf("该树的中序遍历结果为:");
InOrderT(T);
printf("\n");
printf("该树的后序遍历结果为:");
PostOrder(T);
printf("\n");
DestroyBiTree(T);
return 0;
}
效果图:

好了,这天真冷。。。呼呼
gg,又不够字数,老规矩,凑字数
山不在高,有仙则名。水不在深,有龙则灵。斯是陋室,惟吾德馨。苔痕上阶绿,草色入帘青。谈笑有鸿儒,往来无白丁。可以调素琴,阅金经。无丝竹之乱耳,无案牍之劳形。南阳诸葛庐,西蜀子云亭。孔子云:何陋之有?
C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)的更多相关文章
- C#实现二叉树--二叉链表结构
二叉树的简单介绍 关于二叉树的介绍请看这里 : 二叉树的简单介绍 http://www.cnblogs.com/JiYF/p/7048785.html 二叉链表存储结构: 二叉树的链式存储结构是指,用 ...
- Python --- 二叉树的层序建立与三种遍历
二叉树(Binary Tree)时数据结构中一个非常重要的结构,其具有....(此处省略好多字)....等的优良特点. 之前在刷LeetCode的时候把有关树的题目全部跳过了,(ORZ:我这种连数据结 ...
- 二叉树的二叉链表存储结构及C++实现
前言:存储二叉树的关键是如何表示结点之间的逻辑关系,也就是双亲和孩子之间的关系.在具体应用中,可能要求从任一结点能直接访问到它的孩子. 一.二叉链表 二叉树一般多采用二叉链表(binary linke ...
- c使用二叉链表创建二叉树遇到的一些疑问和思考
二叉链表存储二叉树 学习的时候参考的是<大话数据结构>,书中是这样定义的 typedef char TElemType; typedef struct BiTNode { TElemTyp ...
- 树(二叉树 & 二叉搜索树 & 哈夫曼树 & 字典树)
树:n(n>=0)个节点的有限集.有且只有一个root,子树的个数没有限制但互不相交.结点拥有的子树个数就是该结点的度(Degree).度为0的是叶结点,除根结点和叶结点,其他的是内部结点.结点 ...
- C语言递归实现二叉树的先序、中序、后序遍历
#include <stdio.h> #include <stdlib.h> //*****二叉树的二叉链表存储表示*****// typedef struct BiNode ...
- 剑指 Offer 33. 二叉搜索树的后序遍历序列 + 根据二叉树的后序遍历序列判断对应的二叉树是否存在
剑指 Offer 33. 二叉搜索树的后序遍历序列 Offer_33 题目详情 题解分析 本题需要注意的是,这是基于一颗二叉排序树的题目,根据排序二叉树的定义,中序遍历序列就是数据从小到大的排序序列. ...
- Go语言实现:【剑指offer】二叉搜索树的后序遍历序列
该题目来源于牛客网<剑指offer>专题. 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. Go ...
- 五二不休息,今天也学习,从JS执行栈角度图解递归以及二叉树的前、中、后遍历的底层差异
壹 ❀ 引 想必凡是接触过二叉树算法的同学,在刚上手那会,一定都经历过题目无从下手,甚至连题解都看不懂的痛苦.由于leetcode不方便调试,题目做错了也不知道错在哪里,最后无奈的cv答案后心里还不断 ...
随机推荐
- [板子]segTree
segTree 参考:http://www.cnblogs.com/TenosDoIt/p/3453089.html#c 初学者建议先参考上面“一步一步理解线段树”学习理论. 在这里Code分别为区间 ...
- 一个简单大方的赞后+1,踩后-1js动画效果
js部分 <script type="text/javascript"> <!-- $(document).ready(function(e) { $('a.zh ...
- robotframework自动化:登陆操作
robotframework自动化系统:登录 robotframework对于编程能力比较弱的测试人员而言,真的是雪中送炭!我们可以使用robotframework根据之前完成的测试用例,一步步完善自 ...
- 移动端车牌识别sdk开发包(可下载)
移动端车牌识别是一项基于OCR识别的应用技术.移动端车牌识别过程主要包含五个步骤,其中包括图像采集.图像预处理.车牌定位.字符分割.字符识别.输出结果等一系列计算机算法运算, 第一步[图像采集]:此步 ...
- javaSE基础
变量 1.变量就是数据存储空间的表示. 2.标识符命名规则:变量名=首字母+其余部分 ①首字母:字母.下划线.“$”符号(开头) ②其余部分:数字.字母.下划线“$” ③应避开关键字:int int ...
- Oracle-4 - :超级适合初学者的入门级笔记:plsql,基本语法,记录类型,循环,游标,异常处理,存储过程,存储函数,触发器
初学者可以从查询到现在的pl/sql的内容都可以在我这里的笔记中找到,希望能帮到大家,视频资源在 资源, 我自己的全套笔记在 笔记 在pl/sql中可以继续使用的sql关键字有:update del ...
- Three ways to throw exception in C#. Which is your preference?
There are three ways to 'throw' a exception in C# C#中有三种抛出异常的方式 Use the throw keyword without an id ...
- 借助 frp 随时随地访问自己的树莓派
前言 看了知乎上的一个「树莓派」是什么以及普通人怎么玩? 的高票回答,双十一时间,果断买了一个树莓派 3. 周一(11.13) 到的货.我目前只想实现一个简单的功能 -- 想从任意位置访问我的树莓派. ...
- Spring AOP高级——源码实现(2)Spring AOP中通知器(Advisor)与切面(Aspect)
本文例子完整源码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/Spring%20AOP%E9%A ...
- SDN/NFV趋势思考点滴
一.为什么控制器.网管OSS融合? 1.云化是趋势:传统网络架构管理规模达到瓶颈:微服务架构通过扩充多实例解决管理规模问题.2.NFV是趋势:设备运营商传统网元在云化,以软件形式提供VNF:3.运维体 ...