九度OJ 教程35 排序二叉树的建立与遍历。

来源:互联网 发布:mars软件下载 编辑:程序博客网 时间:2024/06/10 09:47

题目地址: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);}


原创粉丝点击