①题目

②代码
#include<stdio.h>
typedef struct TreeNode{
struct TreeNode* left;
struct TreeNode* right;
char val;
}TNode;
TNode* CreateTree(char* a,int* pi){
if (a[*pi] == '#'){
++(*pi);
return NULL;
}
TNode* root = (TNode*)malloc(sizeof(TNode));
root->val = a[*pi];
++(*pi);
root->left = CreateTree(a, pi);
root->right = CreateTree(a, pi);
return root;
}
void InOrder(TNode* root){
if (root == NULL){
printf("#->");
return;
}
InOrder(root->left);
printf("%c->", root->val);
InOrder(root->right);
return;
}
int main(){
int i = 0;
char str[100];
scanf("%s", str);
InOrder(CreateTree(str, &i));
return 0;
}
③解决思路:
将输入的字符串存到一个数组中,将数组第一个字符开始遍历
1)如果该字符为‘#’,则不创建结点,而直接返回NULL
2)如果该字符不是‘#’,则创建一个新结点,新结点的val就是该字符,再递归调用CreateTree函数,去创建它的左子树和右子树。