1.题目描述
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。
示例一
2.原题链接
3.思路分析
对示例1中的样例即:abc##de#g##f### 进行先序遍历建立一个二叉树,如下图:
然后再将这颗树进行中序遍历进行最后的结果输出
4.代码实现
#include <stdio.h>
struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
char val;
};
//中序遍历
void InOreder(struct TreeNode* root)
{
if (root == NULL)
{
/* printf("NULL");*/
return;
}
InOreder(root->left);
printf("%c ", root->val);
InOreder(root->right);
}
struct TreeNode* CreatePreOrederTree(char * a, int* pi) //前序遍历创建二叉树
{
//如果是'#' ,递归结束
if (a[*pi] == '#')
{
(*pi)++;
return NULL;
}
//不是'#',将根节点赋值
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
root->val = a[(*pi)++];
root->left = CreatePreOrederTree(a, pi);
root->right = CreatePreOrederTree(a, pi);
return root;
}
int main()
{
char a[100] ;
scanf("%s", a);
//先序遍历创建二叉树
int i = 0;
struct TreeNode* root= CreatePreOrederTree(a, &i);
//中序遍历输出
InOreder(root);
return 0;
}
如果你觉得这篇文章对你有帮助,不妨动动手指给点赞收藏加转发,给鄃鳕一个大大的关注
你们的每一次支持都将转化为我前进的动力!!