87 求先序排列
作者: Turbo时间限制: 1S章节: 深度优先搜索
问题描述 :
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入说明 :
两行,每行一个字符串,分别表示中序和后序排列
输出说明 :
一个字符串,表示所求先序排列
输入范例 :
BADC
BDCA
输出范例 :
ABCD
#include<stdio.h>
#include <string.h>
char s1[8];
char s2[8];
void f(int p1, int p2, int q1, int q2)
{
//stop
if(p1>p2 || q1>q2) return;
//find index
int i = p1;
while(s1[i] != s2[q2]) i++;
//prnt node
printf("%c",s1[i]);
//left
f(p1, i-1, q1, q1+i-1-p1); //通过中序 根减左 就能知道左子树有几个节点
//right
f(i+1, p2, q1+i-p1, q2-1);
}
int main() {
memset(s1,0,sizeof(char));
memset(s2,0,sizeof(char));
gets(s1);
gets(s2);
int n = strlen(s1)-1;
f(0,n,0,n);
return 0;
}
解题思路:1.求出根节点
2.通过根节点进行拆分左右子树
3.进行递归遍历(求出先序遍历) 记得递归终止条件