现在的位置: 首页 > 综合 > 正文

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

2013年10月02日 ⁄ 综合 ⁄ 共 1575字 ⁄ 字号 评论关闭

 //二叉树的链式存储, 先序输入,三种输出
# 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;
}
  }

}


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

抱歉!评论已关闭.