学习二叉树,看了两天也不明白,唉!acm之路让我体验到要付出巨大的努力,废话不多说,看我网上找到的代码:
此题题意很明确,给你先序遍历,中序遍历,求后序遍历。但代码就让我找不到东西了。
#include#include 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
这为结构体指针的一个代码!
#include#include 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;}
也许以后会看得懂吧!