利用二叉树的链式存储结构实现树的先序、中序、后续遍历

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

typedef int Status;

#define OK 1

#define ERROR  0

//二叉树的二叉链表存储表示

typedef struct BiTNode //参考书Pg. 127

{

char data;//结点元素

struct BiTNode * lchild,*rchild;//左右孩子节点

}BiTNode,*BiTree;

char d[30]={'-','+','a',' ',' ','*','b',' ',' ','-','c',' ',' ','d',' ',' ','/','e',' ',' ','f',' ',' '};//先序序列

char e[30]={' ','a',' ','+',' ','b',' ','*',' ','c',' ','-',' ','d',' ','-',' ','e',' ','/',' ','f',' '};//中序序列

int i=0;

char ch;

Status CreateInBiTree(BiTree &T)//初始化利用先序输入实现

{//请补充你的代码:按先序输入二叉树中结点的值(一个字符),空格字符表示空树,可以参考  书Pg. 131 按先序输入二叉树 算法6.4

ch=d[i];

i++;

if(ch==' ')

T=NULL;

else

{

T=new BiTNode;

T->data =ch;

CreateInBiTree(T->lchild );

CreateInBiTree(T->rchild );

}

return OK;

}

Status PreOrderTraverse(BiTree T)

{//请补充你的代码:先序遍历二叉树T,输出T的先序序列,可以参考 书Pg. 129 算法6.1

if(T)

{

printf("%c",T->data );

PreOrderTraverse(T->lchild );

PreOrderTraverse(T->rchild );

}

return OK;

}

Status InOrderTraverse(BiTree T)

{//请补充你的代码:中序遍历二叉树T,输出T的中序序列,可以参考 书Pg. 129 算法6.1

if(T)

{

InOrderTraverse(T->lchild );

printf("%c",T->data );

InOrderTraverse(T->rchild );

}

return OK;

}

Status PostOrderTraverse(BiTree T)

{//请补充你的代码:后序遍历二叉树T,输出T的后序序列,可以参考 书Pg. 129 算法6.1

if(T)

{

PostOrderTraverse(T->lchild );

PostOrderTraverse(T->rchild );

printf("%c",T->data );

}

return OK;

}

Status DestroyBiTree(BiTree &T)

{//请补充你的代码:销毁二叉树T

if(T)

{

DestroyBiTree(T->lchild );

DestroyBiTree(T->rchild );

delete(T);

T->lchild =NULL;

T->rchild =NULL;

}

return OK;

}

//以下可以根据需要定义自己的函数

//主函数

int main(int argc,char* argv[])

{

//输出你的姓名和学号

printf("\n%s, %s\n",name,id);

BiTree T;

//请补充你的代码:初始化T, 建立一个如参考书Pg.129 图6.9的二叉树,其中序序列为:a+b*(c-d)-e/f

CreateInBiTree(T);

//请补充你的代码:请按先序遍历T,并且在屏幕上输出T的先序序列:- + a * b - c d / e f

PreOrderTraverse(T);

printf("\n");

//请补充你的代码:请按中序遍历T,并且在屏幕上输出T的中序序列:a + b * c - d - e / f

  InOrderTraverse(T);

printf("\n");

//请补充你的代码:请按后序遍历T,并且在屏幕上输出T的后序序列:a b c d - * + e f / -

PostOrderTraverse(T);

//请补充你的代码:释放T

DestroyBiTree(T);

return 1;

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我睁眼了呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值