当前位置: 代码迷 >> 编程 >> 9度OJ 教程35 排序二叉树的建立与遍历
  详细解决方案

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

热度:4905   发布时间:2013-02-26 00:00:00.0
九度OJ 教程35 排序二叉树的建立与遍历。

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


  相关解决方案