题目如下:
解题过程如下:
思路:
-
读取输入的先序遍历字符串保存在数组中
-
创建二叉树
-
中序遍历
创建二叉树的过程:
代码:
BTNode* createTree(char* arr, int* pi)
{
if (arr[*pi] == '#')
{
(*pi)++;
return NULL;
}
BTNode* root = buyNode(arr[*pi]);
(*pi)++;
root->left = createTree(arr, pi);
root->right = createTree(arr, pi);
return root;
}
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
//定义二叉树结点的结构
typedef struct BinaryTreeNode{
char data;
struct TreeNode* left;
struct TreeNode* right;
}BTNode;
//申请一个结点
BTNode* buyNode(char ch)
{
BTNode* root = (BTNode*)malloc(sizeof(BTNode));
root->data = ch;
root->left = root->right = NULL;
return root;
}
BTNode* createTree(char* arr, int* pi)
{
if (arr[*pi] == '#')
{
(*pi)++;
return NULL;
}
BTNode* root = buyNode(arr[*pi]);
(*pi)++;
root->left = createTree(arr, pi);
root->right = createTree(arr, pi);
return root;
}
void inOrder(BTNode* root)
{
if (root == NULL)
{
return;
}
inOrder(root->left);
printf("%c ", root->data);
inOrder(root->right);
}
int main() {
//读取输入的先序遍历字符串保存在数组中
char arr[100];
scanf("%s", arr);
//根据先序遍历创建二叉树
int i = 0;
BTNode* root = createTree(arr, &i);
//中序遍历
inOrder(root);
return 0;
}