二叉搜索树的遍历

Description

给定一组无序整数,以第一个元素为根节点,生成一棵二叉搜索树,对其进行中序遍历和先序遍历。

Input
输入包括多组数据,每组数据包含两行:第一行为整数m(1<=m<=3000),表示该组数据中整数的数目,第二行给出m个整数,相邻整数间用一个空格间隔。最后一组数据后紧跟着包含0的一行输入,标识输入的结束。
Output
每组输入产生两行输出,第一行是中序遍历结果,第二行是先序遍历结果,每个整数后面带一个空格,每行中第一个整数前无空格。
Sample Input
Copy sample input to clipboard
910 4 16 9 8 15 21 3 12620 19 16 15 45 480
Sample Output
3 4 8 9 10 12 15 16 2110 4 3 9 8 16 15 12 2115 16 19 20 45 4820 19 16 15 45 48

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
using namespace std;

typedef struct NODE{
	NODE* lchild;
	NODE* rchild;
	int val;
}node;

node* CreatSearchTree(int value[],int size){
	int flag=0;
	node* pt = (node*)malloc(sizeof(node));
	node* cur;
	node* temp;
	
	pt->lchild = pt->rchild = NULL;
	pt->val = value[0];
	
	flag = 0;
	
	for(int i = 1;i<size;i++){
		temp = pt;
		while(temp != NULL){
			if(value[i] < temp->val){
				cur = temp;
				flag = -1;
				temp = temp->lchild;
			} 
			else{
				cur = temp;
				flag = 1;
				temp = temp->rchild;
			}
			
			
		}
		
		if(flag == -1){
			cur->lchild = (node*)malloc(sizeof(node));
			cur->lchild->val = value[i];
			cur->lchild->lchild = cur->lchild->rchild = NULL;
		}
		
		else if(flag == 1){
			cur->rchild = (node*)malloc(sizeof(node));
			cur->rchild->val = value[i];
			cur->rchild->lchild = cur->rchild->lchild = NULL;
		}
	} 
	return pt;
} 



void preorder(node* pt){
	if(pt != NULL){
		cout<<pt->val<<' ';
		preorder(pt->lchild);
		preorder(pt->rchild);
	}
}

void inorder(node* pt){
	if(pt != NULL){
		inorder(pt->lchild);
		cout<<pt->val<<' ';
		inorder(pt->rchild);
	}
}

int a[3001];

int main(){
	int n;
	while(cin>>n && n){
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		node* pt=CreatSearchTree(a,n);
		inorder(pt);
		cout<<endl;
		preorder(pt);
		cout<<endl;
		
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值