您的位置:首页 > 其它

二叉树中后序序列求先序序列

2015-12-12 17:58 162 查看
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));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树