POJ Falling Leaves

#include<bits/stdc++.h>
using namespace std;

int n;
char d[1000],temp;

struct node{
	int lson,rson;
	char data;
}tree[1000];

void build(int i,char ch){//i是应该插入的位置 
	if(tree[i].data==0){
		tree[i].data=ch;
		return;
	}
	if(ch<tree[i].data){//应该插入到左子树 
		if(tree[i].lson==0) tree[i].lson=n++;//左子树为空,建立一个空的左子节点 
		build(tree[i].lson,ch);
	}
	if(ch>tree[i].data){//应该插入到右子树 
		if(tree[i].rson==0) tree[i].rson=n++;
		build(tree[i].rson,ch);
	}
}
void preorder(int i){
	if(tree[i].data==0) return;
	printf("%c",tree[i].data);
	preorder(tree[i].lson);//如果左子节点是空的话,tree[i].lson=0,这样下一次就会访问到tree[0],tree[0].data恒为零 
	preorder(tree[i].rson);
}
int main(){
	while(scanf(" %c",&d[0])){
		memset(tree,0,sizeof(tree));
		int l=1;
		n=2;
		while(scanf(" %c",&temp)){
			if(temp=='*'||temp=='$') break;
			d[l++]=temp;
		}
		for(int i=l-1;i>=0;i--) build(1,d[i]);
		preorder(1);
		printf("\n");
		if(temp=='$') break;
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值