POJ总结(2255)

来源:互联网 发布:淘宝刷一个单多少钱 编辑:程序博客网 时间:2024/06/08 11:15

POJ总结(2255)

知识点复习:

这个题目主要是树的遍历问题。即给出树的先序和中序遍历,输出树的后序遍历。这是一道很基础的题目,但是很久没有涉及到过了,总结一波。

1.先序、中序、后序遍历:这三个很容易理解,命名分别是根据什么时候读取根节点来判断的。先序即为根节点、左子树、右子树;中序即为左子树、根节点、右子树;后序即为左子树、右子树、根节点。

2.左子树和右子树依然按照1中所述的规则进行遍历。

3.代码实现过程主要涉及到递归调用;递归时要注意的是,每次调用递归函数时,传给函数的参数,每次传给函数的参数意义都是相通的;还需注意的是递归的终止条件。

4.end of file;这里涉及到当输入为end of file时终止输入;相关代码为:

getchar()!=EOF

代码:

#include<stdio.h>#include<string.h>void test(char* pre,char* in,int length);int main(){    do    {        char pre[26]="";        char in[26]="";        scanf("%s %s",pre,in);        test(pre,in,strlen(pre));        printf("\n");    }while(getchar()!=EOF);    return 0;}void test(char* pre,char* in,int length){    char* mid=NULL;    if(length==0)    {        return;    }    for(mid=in;mid<=in+length;mid++)    {        if(*mid==*pre)        {            break;        }    }    char* preLeft=pre+1;    char* inLeft=in;    int lengthLeft=mid-in;    char* preRight=pre+lengthLeft+1;    char* inRight=mid+1;    int lengthRight=length-lengthLeft-1;    test(preLeft,inLeft,lengthLeft);    test(preRight,inRight,lengthRight);    printf("%c",*pre);}
原创粉丝点击