数据结构上机测试4.1:二叉树的遍历与应用1
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。
Input
第一行输入二叉树的先序遍历序列;
第二行输入二叉树的中序遍历序列。
第二行输入二叉树的中序遍历序列。
Output
输出该二叉树的后序遍历序列。
Example Input
ABDCEF BDAECF
Example Output
DBEFCA
#include <stdio.h> #include <string.h> #include <stdlib.h> struct node { char data; struct bitree *l,*r; }; char a[5000],b[5000];//a前序b中序 int l1,h1,l2,h2; struct node *creat() //前序建立 { struct node *root; char c; c = a[l1++]; if(c == ',') return NULL; else { root = (struct node *)malloc(sizeof(struct node)); root->data = c; root->l=creat(); root->r=creat(); } return root; } struct node *creat2(int n,char *a,char *b)//前序中序建立 { struct node *root; int i; if(n == 0) return NULL; root = (struct node *)malloc(sizeof(struct node)); root->data=a[0]; for(i = 0;i < n;i++) { if(b[i] == a[0]) break; } root->l=creat2(i,a+1,b); root->r=creat2(n-i-1,a+i+1,b+i+1); return root; } void preorder(struct node *root) //前序遍历 { struct node *p; p = root; if(p!=NULL) { printf("%c",p->data); preorder(p->l); preorder(p->r); } } void inorder(struct node *root)//中序遍历 { struct node *p; p = root; if(p!=NULL) { inorder(p->l); printf("%c",p->data); inorder(p->r); } } void postorder(struct node *root)//后序遍历 { struct node *p; p = root; if(p!=NULL) { postorder(p->l); postorder(p->r); printf("%c",p->data); } } int main() { int n; struct node *root; scanf("%s%s",a,b); n = strlen(a); root = creat2(n,a,b); postorder(root); printf("\n"); return 0; }