博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言递归实现二叉树(二叉链表)的三种遍历和销毁操作(实验)
阅读量:6251 次
发布时间:2019-06-22

本文共 2353 字,大约阅读时间需要 7 分钟。

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

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

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

③销毁二叉树

 

二叉树的节点结构定义

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

你可能感兴趣的文章
申小雨命案审理延期至3月5日 警方将翻译嫌犯口供
查看>>
第五届中欧文化艺术节开幕 谭盾“领衔”献艺
查看>>
财政部:2018年全国财政收入超18万亿元 同比增6.2%
查看>>
C罗失点 尤文图斯3:0切沃延续联赛不败纪录
查看>>
湖北整治清退非法码头 为长江“留白增绿”
查看>>
为什么要把网站升级到HTTPS
查看>>
【Hello CSS】序章-起源
查看>>
转行IT要趁早,多迪教育新就业数据告诉你真相
查看>>
JavaScript深入之参数按值传递
查看>>
Fragment总结
查看>>
Flutter进阶:深入探究 ListView 和 ScrollPhysics
查看>>
深入了解virtual dom
查看>>
spring事物应该注意的地方
查看>>
浅析 Vue 2.6 中的 nextTick 方法
查看>>
一篇文章搞懂闭包。
查看>>
结合实际场景谈一谈微服务配置
查看>>
我的前端面试总结(套路篇)
查看>>
ApacheCN 学习资源汇总 2018.11
查看>>
数字滚动插件numberAnimate.js的使用及效果修改
查看>>
从JS引擎理解Await b()与Promise.then(b)的堆栈处理
查看>>