#include <stdio.h>
typedef char BTDataType;
typedef struct BinaryTreeNode
{
BTDataType data;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
}BTNode;
BTNode* BuyBTNode(BTDataType x)
{
BTNode* newNode = (BTNode*)malloc(sizeof(BTNode));
if (newNode == NULL)
{
perror("malloc failed");
return NULL;
}
newNode->data = x;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
BTNode* BinaryTreeCreate(BTDataType* a, int n, int* pi)
{
//当*pi > n时,后续节点默认为空
if (*pi >= n)
{
(*pi)++;
return NULL;
}
if (a[*pi] == '#')
{
(*pi)++;
return NULL;
}
BTNode* root = BuyBTNode(a[*pi]);
(*pi)++;
root->left = BinaryTreeCreate(a, n, pi);
root->right = BinaryTreeCreate(a, n, pi);
return root;
}
//针对char输出
void BTNodePrint(BTNode* node)
{
if (node == NULL)
{
printf("");
}
else
{
printf("%c ", node->data);
}
}
void BinaryTreeInOrder(BTNode* root)
{
if (root == NULL)
{
BTNodePrint(root);
return;
}
BinaryTreeInOrder(root->left);
BTNodePrint(root);
BinaryTreeInOrder(root->right);
}
int main()
{
char a[100] = {};
while (scanf("%s", a) != EOF)
{
//创建二叉树
int i = 0;
BTNode* root = BinaryTreeCreate(a, 100, &i);
//中序遍历
BinaryTreeInOrder(root);
}
return 0;
}