二叉树的链式存储和三种遍历(代码)

//二叉树的链式存储, 先序输入,三种输出
# include <stdlib.h>
# include <iostream.h>

//树的结点元素类型
typedef struct element
{
char data;//存放元素值
struct element *lchild,*rchild;//存放左右孩子结点的指针
}*shu;

//先序输入函数
void shuru(shu &s)
{
char ch;//存放用户的输入值
cout<<"请按先序顺序输入树中结点字符(无孩子时,输入'$'):";//体会这条语句
cin>>ch;
if(ch!='$')
{
s=(shu)malloc(sizeof(struct element));//开辟一个结点类型的空间,并把地址给s
s->data=ch;//把数据存放到s所指地址的data项中
shuru(s->lchild);//迭代的思想
shuru(s->rchild);//迭代的思想
}
else
s=NULL;
}

//先序输出函数,后面的几种输出的思想都一样,后面的就不作介绍
void shuchu1(shu s)
{
if(s!=NULL)
{//不为空树的操作
cout<<s->data;//输出第一个结点的值
shuchu1(s->lchild);//把该结点lchild项的值当实参,再次调用shuchu1函数
shuchu1(s->rchild);
}
}

//后序输出函数
void shuchu2(shu s)
{
if(s!=NULL)
{
shuchu2(s->lchild);
shuchu2(s->rchild);
cout<<s->data;
}
}

//中序输出函数
void shuchu3(shu s)
{
if(s!=NULL)
{
shuchu3(s->lchild);
cout<<s->data;
shuchu3(s->rchild);
}
}

//主函数
void main()
{
int option1;//存放用户菜单的选择
int option2;//存放用户子菜单的选择
shu s;//定义一个表头

option1=0;
option2=0;
while(option1!=3)
{
cout<<"\n\n\n\n 菜单\n\n";
cout<<" 1、输入\n";
cout<<" 2、输出\n";
cout<<" 3、退出\n\n";
cout<<"请选择您的操作:";
cin>>option1;
switch(option1)
{
case 1:
shuru(s);
cout<<"输入操作已完成!\n";
break;
case 2:
cout<<"\n\n 1、树的先序输出方式\n";
cout<<" 2、树的后序输出方式\n";
cout<<" 3、树的中序输出方式\n\n";
cout<<"请选择树的输出方式:";
cin>>option2;

switch(option2)
{
case 1:
cout<<"树的先序输出的结构是:";
shuchu1(s);
cout<<"\n\n输出操作已完成!\n";
break;
case 2:
cout<<"树的后序输出的结构是:";
shuchu2(s);
cout<<"\n\n输出操作已完成!\n";
break;
case 3:
cout<<"树的中序输出的结构是:";
shuchu3(s);
cout<<"\n\n输出操作已完成!\n";
break;
default:
break;
}
break;
default:
break;
}
}

}


心得:如果在迭代那有不懂的,很正常,下点功夫,努力+时间=成功!如果你明白迭代的思想,那么,你一定要动手敲敲。对树的操作还有很多,有很多我也不会,我们一起努力,一起加油!




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值