题目地址:http://ac.jobdu.com/problem.php?cid=1040&pid=34
//九度OJ 教程35 排序二叉树的建立与遍历。//http://ac.jobdu.com/problem.php?cid=1040&pid=34#include <stdio.h>typedef struct tt{ int data; struct tt *l,*r;}tt,*tp;void LNR(tt *root);void LRN(tt *root);void NLR(tt *root);void tfree(tt *root){ if(root==NULL)return; tfree(root->l); tfree(root->r); free(root);}int main(){ int n; while(~scanf("%d",&n)) { tp root=(tt *)malloc(sizeof(tt)); tp p=NULL,q2=NULL,q1=NULL; int i,j,k,flag; scanf("%d",&(root->data)); root->l=root->r=NULL; for(i=1;i<n;i++) { flag=1; q1=NULL; q2=root; p=(tt *)malloc(sizeof(tt)); p->l=p->r=NULL; scanf("%d",&(p->data)); while(q2!=NULL) { if(p->data==q2->data)//若存在相等的元素,设置flag=0,然后直接break { flag=0; break; } if(p->data>q2->data) { q1=q2; q2=q2->r; } else { q1=q2; q2=q2->l; } } if(flag)//若存在相等的元素,直接忽略掉,free()就好了。 { if(p->data>q1->data){q1->r=p;} else q1->l=p; } else free(p); } NLR(root); printf("\n"); LNR(root); printf("\n"); LRN(root); printf("\n"); tfree(root); } return 0;}void LNR (tt *root){ if(!root)return; LNR (root->l); printf("%d ",root->data); LNR (root->r);}void LRN (tt *root){ if(!root)return; LRN(root->l); LRN(root->r); printf("%d ",root->data);}void NLR(tt *root){ if(!root)return; printf("%d ",root->data); NLR(root->l); NLR(root->r);}