import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String str1 = scanner.nextLine();
String str2 = scanner.nextLine();
showResult(str1, str2);
System.out.println();
}
}
private static void showResult(String str1, String str2) {
/*
* str1是中序序列,str2是后序序列
* 特点:后序序列最后一位是root节点,中序序列以root节点分为左右子树
* 在第一个判断语句中str1.substring(0,index)是取其左子树,第二个参数str2.substring(0,index)也是取左子树
* ps:先后序列遍历都是先遍历完左子树,再遍历右子树
* 关于参数,是通过index找到的,左右子树出现在[0-length]之间
* 在if语句中index==0说明左子树为空,index==length-1说明右子树为空,故不需再递归
* 第一个if能够取出root节点左子树,第二个if能够取出root节点右子树。当节点的左子树为空时,进入第二个if;
* 当节点的右子树为空时,进入第一个if。两者既相互独立,又相互协调
*
* 中后序列求先序序列步骤就是:
* 1).先从后序序列取出root节点
* 2).将中序序列分为左右子树,并判断左右子树是否为空
* 3).若非空,则递归
* 这样便使得每次print结果都是根节点,正好是先序序列
*/
char chl = str2.charAt(str2.length() - 1);
System.out.println(chl);
int index = str1.indexOf(chl);
if (index > 0) {
showResult(str1.substring(0, index), str2.substring(0, index));
}
if (index < str1.length() - 1) {
showResult(str1.substring(index + 1), str2.substring(index, str2.length() - 1));
}
}
}
二叉树中后序序列求先序序列
最新推荐文章于 2022-07-25 22:02:37 发布