#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;
}
}
POJ Falling Leaves
最新推荐文章于 2020-08-21 11:52:07 发布