数据结构上机测试4.1:二叉树的遍历与应用1
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。
Input
第一行输入二叉树的先序遍历序列;
第二行输入二叉树的中序遍历序列。
第二行输入二叉树的中序遍历序列。
Output
输出该二叉树的后序遍历序列。
Example Input
ABDCEF BDAECF
#include <stdio.h> #include <stdlib.h> #include <string.h> struct node { char data; struct node *lt, *rt; }; struct node *Creat(int n, char *pre, char *mid)///用先序序列和中序序列建立二叉树 { if(n==0) return NULL;///设置边界条件 struct node *root; root=(struct node *)malloc(sizeof(struct node)); root->data=pre[0]; int i; for(i=0;i<n;i++)///寻找左右子树的元素 if(pre[0]==mid[i]) break; root->lt=Creat(i, pre+1, mid);///建立左子树 root->rt=Creat(n-i-1, pre+i+1, mid+i+1);///建立右子树 return root; } ///后序遍历 void last(struct node *root) { if(root) { last(root->lt); last(root->rt); printf("%c", root->data); } } int main() { int len ; char pre[100], mid[100]; scanf("%s%s", pre, mid); struct node *root=NULL; len=strlen(pre); root=Creat(len, pre, mid); last(root); return 0; }
Example Output
DBEFCA