数据结构上机测试4.1:二叉树的遍历与应用1
Time Limit: 1000MS Memory limit: 65536K
题目描述
输入二叉树的先序遍历序列和中序遍历序列,输出该二叉树的后序遍历序列。
输入
第一行输入二叉树的先序遍历序列;
第二行输入二叉树的中序遍历序列。
第二行输入二叉树的中序遍历序列。
输出
输出该二叉树的后序遍历序列。
示例输入
ABDCEF BDAECF
示例输出
DBEFCA
可以把这个问题看做是模板性问题,已知先序和中序求后序,由定义可知,先序的第一个数字即是根节点,可以利用此特性在中序中查找这个根节点,并把中序分成左子树和右子树两个部分,再经过不断的递归调用,找到数,输出。
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; struct jied { char date; struct jied *lchild,*rchild; }; void jianshu(char *sz,char *sx,int len) { if(len == 0) return ; jied* T = new jied; T -> date = *sx; int i = 0; for(; i<len; i++) { if(sz[i] == *sx) break; } jianshu(sz,sx+1,i); jianshu(sz+i+1,sx+i+1,len-(i+1)); printf("%c",T->date); return ; } int main(int argc,char* argv[]) { int len; char sz[100],sx[100]; gets(sx); gets(sz); len = strlen(sz); jianshu(sz,sx,len); printf("\n"); return 0; }