根據二叉樹的前序遍歷串和後序遍歷串求中序遍歷串演算法
阿新 • • 發佈:2019-01-23
如果是根據中序結果和前序或後序的話,得出的結果應該是唯一的,而且也比較簡單
但是根據前序和後序,求中序結果就有多種可能了,難度有點大,之前百度了一下沒找到相關部落格文章指導,那就自己琢磨寫一個把
下面是我自己寫的求中序的演算法:
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種結果
程式應該是沒問題的,各種測試結果也正確