一. 题目介绍
二. 题目分析
首先
题目让我们以先序遍历的方式用字符串建立一个二叉树
输入是一个字符串
输出是是以中序遍历二叉树打印
我们先来看最简单的输入
这里只要建立一个字符数组 然后等测试用例输入就好了
char a[100];
scanf("%s",a);
代码表示如上
之后我们再开始创建二叉树
我们可以看到 它是先序遍历
所以说我们要用先序遍历的方式来创建二叉树
我们先来创建二叉树的结构体
代码表示如下
struct TreeNode
{
struct TreeNode*left;
struct TreeNode*right;
char val;
};
之后我们开始写创建二叉树的代码(前序)
struct TreeNode* CreatTree(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 = CreatTree(a,pi);
root->right = CreatTree(a,pi);
return root;
}
这个时候我们不能使用i因为i是传值传递的
我们这个时候需要使用指针来接受i的值
之后我们开始中序遍历打印
void InOrdef(struct TreeNode*root)
{
if(root ==NULL)
{
return ;
}
InOrdef(root->left);
printf("%c ",root->val);
InOrdef(root->right);
}
三. 所有代码
#include <stdio.h>
#include<stdlib.h>
struct TreeNode
{
struct TreeNode*left;
struct TreeNode*right;
char val;
};
struct TreeNode* CreatTree(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 = CreatTree(a,pi);
root->right = CreatTree(a,pi);
return root;
}
void InOrdef(struct TreeNode*root)
{
if(root ==NULL)
{
return ;
}
InOrdef(root->left);
printf("%c ",root->val);
InOrdef(root->right);
}
int main() {
char a[100];
scanf("%s",a);
int i =0;
struct TreeNode*root= CreatTree(a,&i);
InOrdef(root);
return 0;
}
运行一下
完美运行
以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言