如果是根据中序结果和前序或后序的话,得出的结果应该是唯一的,而且也比较简单
但是根据前序和后序,求中序结果就有多种可能了,难度有点大,之前百度了一下没找到相关博客文章指导,那就自己琢磨写一个把
下面是我自己写的求中序的算法:
public class Test {
public static String inOrder(String preString,String postString){
if(preString.isEmpty()){
return "";
}
if(preString.length()==1){
return preString;
}
char rootValue=preString.charAt(0);
int leftRootIndex=postString.indexOf(preString.substring(1, 2));
if(leftRootIndex==postString.length()-2){//缺少左子树或右子树
return "("+inOrder(preString.substring(1),postString.substring(0, postString.length()-1))+rootValue+","+
rootValue+inOrder(preString.substring(1),postString.substring(0, postString.length()-1))+")";
}else{//存在左子树和右子树
return inOrder(preString.substring(1, leftRootIndex+2),postString.substring(0, leftRootIndex+1))
+rootValue+inOrder(preString.substring(leftRootIndex+2),postString.substring(leftRootIndex+1, postString.length()-1));
}
}
public static void main(String[] args){
String preString= "ABDEGCF"; //前序遍历串
String postString="DGEBFCA"; //后序遍历串
System.out.println(inOrder(preString,postString));
}
}
运行结果:
DB(GE,EG)A(FC,CF)
总共有四种结果
如果输入是:
String preString= "ABDEGHCF";
String postString="DHGEBFCA";
结果:
DB((HG,GH)E,E(HG,GH))A(FC,CF)
总共有8种结果
程序应该是没问题的,各种测试结果也正确