#include <stdio.h>
#include <malloc.h>
#include <string.h>
typedef struct BiTree
{
char data;
struct BiTree *Lchild;
struct BiTree *Rchild;
}BiTree;
int Search(char num, char *array, int len)//返回前序遍历元素在中序遍历下的数组下标
{
for (int i = 0; i < len; i++)
if (array[i] == num)return i;
}
BiTree *BuildBiTree(char *front, char *center, int len)
{
if (len <= 0)
return NULL;
BiTree *temp =(BiTree*)malloc(sizeof(BiTree)*50);
temp->data = *front;
int pos = Search(*front, center, len);
temp->Lchild = BuildBiTree(front + 1, center, pos);
temp->Rchild = BuildBiTree(front + pos + 1, center + pos + 1, len - pos - 1);
return temp;
}
/*
建树的过程分析:
1.Search函数的作用是找到前序遍历元素在中序遍历中的位置
2.BuildBiTree函数体,len<=0判断条件作用是确定叶子节点,无左右子树
3.递归函数生成二叉树(需要了解递归过程)
*/
void PostOrderTraverse(BiTree *root)
{
if (root != NULL)
{
PostOrderTraverse(root->Lchild);
PostOrderTraverse(root->Rchild);
printf("%c", root->data);
}
}
int main()
{
char preorder1[50];
char inorder1[50];
char *preorder =preorder1;
char *inorder =inorder1;
printf("Please input the pre-order of binary tree : \n");
scanf("%s",preorder);
printf("Please input the in-order of binary tree : \n");
scanf("%s",inorder);
BiTree *root = BuildBiTree(preorder1, inorder1, strlen(inorder1));
PostOrderTraverse(root);
printf("\n");
return 0;
}
根据二叉树的前、中序遍历构造一棵二叉树
于 2020-03-28 00:01:17 首次发布