#include <stdio.h> #include<assert.h> #include<stdlib.h> typedef char BTDataType; typedef struct BinaryTreeNode { BTDataType _data; struct BinaryTreeNode* _left; struct BinaryTreeNode* _right; }BTNode; BTNode* BuyNewBTNode(BTDataType x) { BTNode* newnode = (BTNode*)malloc(sizeof(BTNode)); if (newnode == NULL) { perror("malloc fail"); exit(-1); } newnode->_data = x; newnode->_left = NULL; newnode->_right = NULL; return newnode; } // 通过前序遍历的数组"ABD##E#H##CF##G##"构建二叉树 BTNode* BinaryTreeCreate(BTDataType* a, int* pi) { assert(a); if (a[*pi] == '#' || a[*pi] == '\0') { (*pi)++;//步进 return NULL; } BTNode* root = BuyNewBTNode(a[*pi]); (*pi)++;//步进 root->_left = BinaryTreeCreate(a ,pi); root->_right = BinaryTreeCreate(a , pi); return root; } void BinaryTreeInOrder(BTNode* root) { if (root == NULL) { return; } BinaryTreeInOrder(root->_left); printf("%c ", root->_data); BinaryTreeInOrder(root->_right); } int main() { char a[100]; while (scanf("%s", a) != EOF) { // 注意 while 处理多个 case // 64 位输出请用 printf("%lld") to int i = 0; BTNode* root= BinaryTreeCreate(a,&i); BinaryTreeInOrder(root); } return 0; }