zzuli 1208二叉树(一)

二叉树(1)

Time Limit:1000MS  Memory Limit:65536K
Total Submit:193 Accepted:80

Description

1、按扩展的先序序列(即包括空结点)输入二叉树的各结点,建立二叉树,并输出其先序、中序和后序遍历序列。

zzuli <wbr>1208二叉树(一)

如图所示的二叉树的扩展的先序序列为:ABD111C E11F11(1代表空结点)

Input

输入有多组例子,每组数组占一行;

Output

输出对应的结果,每组结果占三行。

Sample Input

ABD111CE11F11

Sample Output

ABDCEF
DBAECF
DBEFCA

# include<stdio.h>


# include<stdlib.h>


char str[1001];


int top;


typedef struct tree{


       char data;


       struct tree *left,*right;


}Lnode,*list;


int m=sizeof(Lnode);


list newnode()//为结点申请地址


{


       list p;


       p=(list)malloc(m);


       p->left=NULL;


       p->right=NULL;


       return p;


}


void Creatree(list p)//建立二叉树


{


       list q,s;


       if(str[top]=='1'||str[top]==0)//如果是空节点或时字符串尾


       {


              p->data='1';


              return ;      返回空(即NULL);                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      


       }


       else


       {


              p->data=str[top];


              s=newnode();//为左子结点申请地址


              p->left=s;//赋给父结点


              top++;


              Creatree(s);


       }


       q=newnode();//为右子结点申请地址


       p->right=q;//赋给父结点


       top++;


       Creatree(q);


}


void pre(list p)//先序遍历(先根结点,左节点,右结点)


{


       if(p==NULL)//结点不存在


              return ;


       if(p->data!='1')//输出根节点的数据


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


       pre(p->left);//递归遍历所有左结点

       pre(p->right);//递归遍历所有右结点


}


 


void mid(list p)//中序遍历 (先左节点,根结点,右结点)


{


       if(p==NULL)


              return ;


       mid(p->left);//递归遍历所有左结点


       if(p->data!='1')//到达叶子节点后,访问根结点


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


       mid(p->right);//再访问右结点


}


void cur(list p)


{


       if(p==NULL)


              return ;


       cur(p->left);//遍历至叶子的左孩子,与空节点后返回,再遍历叶子的右孩子


       cur(p->right);


       if(p->data!='1')


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


}


 


int main()


{


       list root;


       while(gets(str))


       {


              top=0;


              root=newnode();


           Creatree(root);


              pre(root);


              printf("\n");


              mid(root);


              printf("\n");


              cur(root);


              printf("\n");


       }


       return 0;


}


 注:代码是高人写的,注释是我按自己的理解写的,各位路人如有发现错误,敬请斧正!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值