这一题很多人其实连题目都没有读懂到底是什么意思?它是要我们表达什么,或者是要我们干什么。其实它就是说给我们一组字符串,然后要我们把这个字符串先构建成一个二叉树,然后在把这个二叉数用中序遍历来输出结果就可以了。
我们一步一步的来解决这个问题
一.初始化
我们先要有个大局观,先把主函数写了,先把一个主要的思路完成,这个题目我们的思路就是
int main() {
char str[100];//创建字符数组
scanf("%s",str);
int i=0;
TNode*root=CreateTree(str,&i);将字符数据变成二叉树
Inorder(root);中序遍历
return 0;
}
当然我们还需要先初始化一个二叉树
typedef struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char val;
}TNode;
二.创建二叉树
首先先把char*a,int*pi传过去,一个是数组名,一个是下标
if(a[*pi]=='#')
{
(*pi)++;
return NULL;
}
TNode*root=( TNode*)malloc(sizeof(TNode));
if(root==NULL)
{
printf("mallco fail\n");
exit(-1);
}
root->val=a[*pi];
(*pi)++;
root->left=CreateTree(a,pi);
root->right=CreateTree(a,pi);
整体
TNode*CreateTree(char*a,int*pi)
{
if(a[*pi]=='#')
{
(*pi)++;
return NULL;
}
TNode*root=( TNode*)malloc(sizeof(TNode));
if(root==NULL)
{
printf("mallco fail\n");
exit(-1);
}
root->val=a[*pi];
(*pi)++;
root->left=CreateTree(a,pi);
root->right=CreateTree(a,pi);
return root;
}
三.中序遍历
void Inorder(TNode*root)
{
if(root==NULL)
return;
Inorder(root->left);
printf("%c ",root->val);
Inorder(root->right);
}
总结
然后就结束了
我认为这个题目难就难在创建二叉树,和题目的意思,只有意思理解了就好做了