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,又不够字数,老规矩,凑字数
山不在高,有仙则名。水不在深,有龙则灵。斯是陋室,惟吾德馨。苔痕上阶绿,草色入帘青。谈笑有鸿儒,往来无白丁。可以调素琴,阅金经。无丝竹之乱耳,无案牍之劳形。南阳诸葛庐,西蜀子云亭。孔子云:何陋之有?
转载于:https://www.cnblogs.com/yellowgg/p/7856950.html
C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)相关推荐
- 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现
读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 ...
- 建立、遍历二叉树(二叉链表)
建立二叉树: 由于先序.中序.后序遍历的任何一个遍历结果单独都不能唯一确定一颗二叉树,因此不能直接使用其中任何一个遍历结果来构造二叉树(原因是不能确定左右子树的大小(节点数),或者说不知道子树的结束位 ...
- C#实现二叉树--二叉链表结构
二叉树的简单介绍 关于二叉树的介绍请看这里 : 二叉树的简单介绍 http://www.cnblogs.com/JiYF/p/7048785.html 二叉链表存储结构: 二叉树的链式存储结构是指,用 ...
- 理论基础 —— 二叉树 —— 二叉链表
[二叉链表] 二叉树一般采用二叉链表存储,其基本思想是:令二叉树的每个结点对应一个链表结点,链表结点除了存放与二叉树结点有关的数据信息外,还要设置指示左右孩子的指针. template<clas ...
- 二叉链表的建立和遍历 完整的前,中,后和层序建立和遍历
前序,中序.后序.层序建立二叉链表. 无论看没看懂,都值得一看
- 6-2-二叉树(二叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版...
课本源码部分 第6章 树和二叉树 - 二叉树(二叉链表存储) --<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴 ...
- 数据结构-二叉链表的结构与实现
目录 一.引言 二.什么是二叉链表 三.二叉链表的结构 四.二叉链表的实现 1. 创建二叉链表 2. 遍历二叉链表 3. 插入节点 4. 删除节点 五.应用场景 六.总结 七.代码示例 一.引言 数据 ...
- 7-1 层序遍历二叉链表
设计程序,按先序创建二叉树的二叉链表:然后层序遍历二叉树. 输入格式: 按先序输入一棵二叉树.二叉树中每个结点的键值用字符表示,字符之间不含空格.注意空树信息也要提供,以#字符表示空树. 输出格式: ...
- 二叉树层序遍历递归与非递归_二叉树基础(1)-构建和遍历(递归和非递归)...
二叉树的构建有2种方式:1.直接输入数字.2.根据两种顺序来判断另外一中顺序(后面会提到) 这里分享第一种构建方式,二叉树的前中后三种遍历方式(递归和非递归版本),和二叉树的层次遍历. 见代码demo ...
最新文章
- 企业怎样管理员工才会更有效?
- 解决vue中绝对定位或固定定位在底部的按钮随键盘移动的问题
- 基于oracle 的PL/SQL编程 -变量使用
- mysql 9.0创建数据库_数据库基础学习——MySQL数据库知识小结(9)
- php内核总结_深入PHP内核之面向对象总结
- Django 3.2.5博客开发教程:基础配置
- Centos6.5静态IP设置
- java读取文件并显示_JAVA读取本地文件并显示到页面中
- 苹果屏幕供应商JDI正寻求中国投资 因国内面板厂商正在崛起
- jq toggle()方法学习
- 点云自适应滤波matlab代码,散乱点云自适应滤波算法
- 一种低成本动态扩展 Java API 的解决方案 - Ricequant米筐量化
- Go的研习笔记-day12(以Java的视角学习Go)
- 正常高、大地高、海拔高的测绘概念
- 正常邮件被误判为垃圾邮件
- 环保数采仪环境污染在线监控设备 上传监控平台
- 设计模式解密(17)- 备忘录模式
- html制作钢铁侠心脏,钢铁侠的“心脏”并不是特效,得知如何制成的,网友:难以置信...
- 《Windows 8 权威指南》——1.4 易用性
- 统信桌面操作系统V20专业版(1021)发布:稳定又好用