1. 程式人生 > >根據二叉樹的前序遍歷串和後序遍歷串求中序遍歷串演算法

根據二叉樹的前序遍歷串和後序遍歷串求中序遍歷串演算法

如果是根據中序結果和前序或後序的話,得出的結果應該是唯一的,而且也比較簡單

但是根據前序和後序,求中序結果就有多種可能了,難度有點大,之前百度了一下沒找到相關部落格文章指導,那就自己琢磨寫一個把

下面是我自己寫的求中序的演算法:

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種結果

程式應該是沒問題的,各種測試結果也正確