今天写的是二叉树操作的实验,这个实验有三个部分:

①建立二叉树,采用二叉链表结构

②先序、中序、后续遍历二叉树,输出节点值

③销毁二叉树

二叉树的节点结构定义

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语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)相关推荐

  1. 重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

    读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 ...

  2. 建立、遍历二叉树(二叉链表)

    建立二叉树: 由于先序.中序.后序遍历的任何一个遍历结果单独都不能唯一确定一颗二叉树,因此不能直接使用其中任何一个遍历结果来构造二叉树(原因是不能确定左右子树的大小(节点数),或者说不知道子树的结束位 ...

  3. C#实现二叉树--二叉链表结构

    二叉树的简单介绍 关于二叉树的介绍请看这里 : 二叉树的简单介绍 http://www.cnblogs.com/JiYF/p/7048785.html 二叉链表存储结构: 二叉树的链式存储结构是指,用 ...

  4. 理论基础 —— 二叉树 —— 二叉链表

    [二叉链表] 二叉树一般采用二叉链表存储,其基本思想是:令二叉树的每个结点对应一个链表结点,链表结点除了存放与二叉树结点有关的数据信息外,还要设置指示左右孩子的指针. template<clas ...

  5. 二叉链表的建立和遍历 完整的前,中,后和层序建立和遍历

    前序,中序.后序.层序建立二叉链表. 无论看没看懂,都值得一看

  6. 6-2-二叉树(二叉链表存储)-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版...

    课本源码部分 第6章  树和二叉树 - 二叉树(二叉链表存储) --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴 ...

  7. 数据结构-二叉链表的结构与实现

    目录 一.引言 二.什么是二叉链表 三.二叉链表的结构 四.二叉链表的实现 1. 创建二叉链表 2. 遍历二叉链表 3. 插入节点 4. 删除节点 五.应用场景 六.总结 七.代码示例 一.引言 数据 ...

  8. 7-1 层序遍历二叉链表

    设计程序,按先序创建二叉树的二叉链表:然后层序遍历二叉树. 输入格式: 按先序输入一棵二叉树.二叉树中每个结点的键值用字符表示,字符之间不含空格.注意空树信息也要提供,以#字符表示空树. 输出格式: ...

  9. 二叉树层序遍历递归与非递归_二叉树基础(1)-构建和遍历(递归和非递归)...

    二叉树的构建有2种方式:1.直接输入数字.2.根据两种顺序来判断另外一中顺序(后面会提到) 这里分享第一种构建方式,二叉树的前中后三种遍历方式(递归和非递归版本),和二叉树的层次遍历. 见代码demo ...

最新文章

  1. 企业怎样管理员工才会更有效?
  2. 解决vue中绝对定位或固定定位在底部的按钮随键盘移动的问题
  3. 基于oracle 的PL/SQL编程 -变量使用
  4. mysql 9.0创建数据库_数据库基础学习——MySQL数据库知识小结(9)
  5. php内核总结_深入PHP内核之面向对象总结
  6. Django 3.2.5博客开发教程:基础配置
  7. Centos6.5静态IP设置
  8. java读取文件并显示_JAVA读取本地文件并显示到页面中
  9. 苹果屏幕供应商JDI正寻求中国投资 因国内面板厂商正在崛起
  10. jq toggle()方法学习
  11. 点云自适应滤波matlab代码,散乱点云自适应滤波算法
  12. 一种低成本动态扩展 Java API 的解决方案 - Ricequant米筐量化
  13. Go的研习笔记-day12(以Java的视角学习Go)
  14. 正常高、大地高、海拔高的测绘概念
  15. 正常邮件被误判为垃圾邮件
  16. 环保数采仪环境污染在线监控设备 上传监控平台
  17. 设计模式解密(17)- 备忘录模式
  18. html制作钢铁侠心脏,钢铁侠的“心脏”并不是特效,得知如何制成的,网友:难以置信...
  19. 《Windows 8 权威指南》——1.4 易用性
  20. 统信桌面操作系统V20专业版(1021)发布:稳定又好用

热门文章

  1. 1360. 日期之间隔几天 golang
  2. centos给用户添加sudo权限
  3. 计算机网络【1】物理层
  4. 汇编:实现日历星期数查询工具
  5. CodeForces - 1200C——小模拟
  6. 几种并发服务器模型的实现:多线程,多进程,select,poll,epoll
  7. 【计算机系统设计】实践笔记(6)改进数据通路:lw和sw指令
  8. linux 函数手册 在线,Linux系统API函数手册
  9. C# 篇基础知识10——多线程
  10. Web渗透实验:基于Weblogic的一系列漏洞