题意:一个二叉搜索树,不断给出并去掉所有的叶节点,输出前序遍历这棵二叉树的结果。
思路:先全部读入,从最后的根节点开始建立二叉搜索树。
#include<cstdio>
#include<cstring>
using namespace std;
struct node{
char c;
int lch, rch;
}tree[30];
char s[30][30];
int e;
void add(int n, char c)
{
if(tree[n].c > c) {
if(!tree[n].lch) {
tree[e].c = c;
tree[n].lch = e++;
}
else add(tree[n].lch, c);
}
else {
if(!tree[n].rch) {
tree[e].c = c;
tree[n].rch = e++;
}
else add(tree[n].rch, c);
}
}
void pre_order(int n)
{
printf("%c",tree[n].c);
if(tree[n].lch) pre_order(tree[n].lch);
if(tree[n].rch) pre_order(tree[n].rch);
}
int main()
{
int cnt = 0;
while(~scanf("%s",s[cnt++])) {
if(s[cnt-1][0] == '*' || s[cnt-1][0] == '$') {
e = 0;
memset(tree,0,sizeof(tree));
int n = cnt-1;
tree[e++].c = s[n-1][0];
for(int i = n-2; i >= 0; i--) {
int len = strlen(s[i]);
for(int j = 0; j < len; j++)
add(0,s[i][j]);
}
pre_order(0);
printf("\n");
if(s[cnt-1][0] == '$') break;
cnt = 0;
}
}
return 0;
}