九度 1201 -二叉排序数遍历- 二叉排序树
这个是道正统的树构建和遍历题。一開始还想用数组构建取代一下水过去,可是发现不行,仅仅好老老实实的用指针了。二叉排序树和遍历方法假设不清楚定义的话。最好去看看数据结构书复习下。
#include<stdio.h> struct node{ node *l; node *r; int val; node(int a):val(a),l(NULL),r(NULL){}; }; node *root; int n; void qian(node *p){ printf("%d ",p->val); if(p->l!=NULL)qian(p->l); if(p->r!=NULL)qian(p->r); } void zhong(node *p){ if(p->l!=NULL)zhong(p->l); printf("%d ",p->val); if(p->r!=NULL)zhong(p->r); } void hou(node *p){ if(p->l!=NULL)hou(p->l); if(p->r!=NULL)hou(p->r); printf("%d ",p->val); } int main(){ int val; node *p; while(~scanf("%d",&n)){ root=NULL; for(int i=0;i<n;i++){ scanf("%d",&val); if(i==0){ root=new node(val); continue; } p=root; while(1){ if(val==p->val)break; else if(val<p->val){ if(p->l==NULL){ p->l=new node(val); break; } else{ p=p->l;continue; } } else if(val>p->val){ if(p->r==NULL){ p->r=new node(val); break; } else{ p=p->r;continue; } } } } qian(root); printf("\n"); zhong(root); printf("\n"); hou(root); printf("\n"); } return 0; }