学习二叉树,看了两天也不明白,唉!acm之路让我体验到要付出巨大的努力,废话不多说,看我网上找到的代码:

此题题意很明确,给你先序遍历,中序遍历,求后序遍历。但代码就让我找不到东西了。

http://acm.hdu.edu.cn/showproblem.php?pid=1710

#include <stdio.h>
#include <string.h>
void build(int n,int *a,int *b,int *c)
{
    int *p=b;
    if(n<=0)return;
    while(1)
    {
        if(a[0]==*p)
        break;
        else
        p++;
    }
    int x=p-b;
    build(x,a+1,b,c);
    build(n-x-1,a+x+1,b+x+1,c+x);
    c[n-1]=a[0];
}
int main()
{
    int n,i;
    while(~scanf("%d",&n))
    {
        int a[1002],b[1002],c[1002];
        for(i=0;i<n;i++)
        scanf("%d",&a[i]);
        for(i=0;i<n;i++)
        scanf("%d",&b[i]);
        build(n,a,b,c);
        for(i=0;i<n-1;i++)
        {
            printf("%d ",c[i]);
        }   printf("%d\n",c[n-1]);
    }
    return 0;
}

这为结构体指针的一个代码!

#include<stdio.h>
#include<stdlib.h>
int a[1000],b[1000];
int flag;
typedef struct node
{
    int data;
    struct node *lchild,*rchild;
} Tnode,*Tree;
int m=sizeof(Tnode);
Tree newnode()
{
    Tree p;
    p=(Tree)malloc(m);
    p->lchild=NULL;
    p->rchild=NULL;
    return p;
}

void Creat(int i,int j,int k,int t,Tree p)//此处理解甚为重要,建立过程,先自己模拟的过程如果模拟的过程理解了这里就容易许多
{
    p->data=a[i];
    int m;
    for(m=k; m<=t; m++)
    {
        if(a[i]==b[m])
            break;
    }
    if(m==k)p->lchild=NULL;
    else
    {
        p->lchild=newnode();
        Creat(i+1,i+(m-k),k,m-1,(p->lchild));//需要理解的地方
    }
    if(m==t)p->rchild=NULL;
    else
    {
        p->rchild=newnode();
        Creat(i+(m-k)+1,j,m+1,t,(p->rchild));//此处也是需要加强理解之处
    }
}
void post(Tree p)
{
    if(p!=NULL)
    {
        post(p->lchild);
        post(p->rchild);
        if(p->data!=NULL)
            if(flag==0)
            {
                printf("%d",p->data);
                flag=1;
            }
            else
                printf(" %d",p->data);
    }
}

int main()
{
    Tree root;
    int i,n;
    while(scanf("%d",&n)!=EOF)
    {
        flag=0;
        for(i=1; i<=n; i++)
            scanf("%d",&a[i]);
        for(i=1; i<=n; i++)
            scanf("%d",&b[i]);
        root=newnode();
        Creat(1,n,1,n,root);
        post(root);
        printf("\n");
    }
    return 0;
}

 

也许以后会看得懂吧!