树结构练习——排序二叉树的中序遍历

Problem Description
在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。
 
Input
输入包含多组数据,每组数据格式如下。
第一行包含一个整数n,为关键值的个数,关键值用整数表示。(n<=1000)
第二行包含n个整数,保证每个整数在int范围之内。
Output
为给定的数据建立排序二叉树,并输出其中序遍历结果,每个输出占一行。
 
Example Input
1
2
2
1 20Example Output
2
1 20Hint
  


#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
typedef struct BiTNode{
	int data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int cnt;
int a[1001];
BiTree creat(BiTree T,int x){
	if(!T){
		T = new BiTNode;
		T->data=x;
		T->lchild=NULL;
		T->rchild=NULL;
	}
	else{
		if(x<T->data)
		T->lchild=creat(T->lchild,x);
		else
		T->rchild=creat(T->rchild,x);
	}
	return T;
}
void inorder(BiTree T){
	if(T){
		inorder(T->lchild);
		a[cnt++]=T->data;
		inorder(T->rchild);
	}
}
int main(){
	int t,x,i;
	while(cin>>t){
		cnt=0;
		BiTree T=NULL;
		for(i=1;i<=t;i++){
			cin>>x;
			T=creat(T,x);
		}
		inorder(T);
		for(i=0;i<cnt;i++){
			if(i==0)
			cout<<a[i];
			else
			cout<<" "<<a[i];
		}
		cout<<endl;
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值