这题,网上都说是水题,但我觉得不水,略坑额。
有几点得注意,可以通过结点的权值与根节点比较来定位当前结点的位置,这一点着实重要。
剩下几个细节建树时,要引用传参(建树时,不断申请新空间),程序报错了好久啊~~
还有就是某种及其恶心的定义结构体指针的方式typedef +结构体+指针,真的和百度里说的一样,撞鬼了~~
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
const int maxn=1000;
typedef struct Node//
{
char val;
struct Node *left;
struct Node *right;
Node():left(NULL),right(NULL){};
} *node ,node1;
struct Node* root;//root为一个指针~~
char s[maxn][maxn];
void creattrees(struct Node* &root,char val)
{
if(root==NULL)
{
root=new node1();
root->val=val;
root->left=NULL;
root->right=NULL;
}
else if((root->val)>val)
creattrees(root->left,val);
else if((root->val)<val)
creattrees(root->right,val);
}
void preorder(node root)
{
if(root!=NULL) printf("%c",root->val);
if(root->left!=NULL) preorder(root->left);
if(root->right!=NULL) preorder(root->right);
}
int main()
{
while(1)
{
int row;
for( row=0; 1; row++)
{
scanf("%s",s[row]);
if(s[row][0]=='*'||s[row][0]=='$') break;
}
if(s[0][0]=='*') continue;//空树
// printf("12312");
for(int i=row-1; i>=0; i--)
for(int j=0; j<strlen(s[i]); j++)
{
creattrees(root,s[i][j]);
}
preorder(root);
printf("\n");
if(s[row][0]=='$') break;
root=NULL;
}
}