給定二叉樹先序、中序遍歷序列,求後序遍歷


給定一個二叉樹的前序遍歷和中序遍歷的序列,輸出對應這個二叉樹的後續遍歷序列。 java

輸入描述:
輸入爲一行。
兩個字符串,分別表示二叉樹的前序遍歷和中序遍歷結果,用空格分隔。保證數據合法
輸出描述:
對應輸出後序遍歷序列
示例1

輸入

ABDEC DBEAC

輸出

DEBCA
思路:先根據先序、中序序列創建二叉樹,而後後序遍歷
import java.util.Scanner;
 
import javax.print.attribute.standard.PresentationDirection;
 
 class TreeNode {
     char val;
     TreeNode left;
     TreeNode right;
     TreeNode(char x) { val = x; }
 }
  
public class Main {
    public static  String preStr;
    public static String midStr;
     
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        int pos = s.indexOf(" ");
        preStr = s.substring(0,pos);
        midStr = s.substring(pos+1,s.length());
        //System.out.println("pre:"+preStr);
        //System.out.println("midS:"+midStr);
        TreeNode rs = creat(preStr,0,preStr.length()-1,midStr,0,midStr.length()-1);
        rView(rs);
    }
    public static void rView(TreeNode root){
        if(root!=null){
            rView(root.left);
            rView(root.right);
            System.out.print(root.val);
        }
    }
    public static TreeNode creat(String preStr,int pstart,int pend,String midStr,int mstart,int mend){
        if(mstart>mend||pstart>pend) return null;
        char[] cmidStr= midStr.toCharArray();
        char[] cpreStr=preStr.toCharArray();
        TreeNode root = new TreeNode(cpreStr[pstart]);
        for(int i = mstart;i<=mend;i++)
            if(cmidStr[i]==cpreStr[pstart]){
                int len = i-mstart;
                 
                root.left = creat(preStr,pstart+1,pstart+len,midStr,mstart,i-1);
                root.right = creat(preStr,pstart+len+1,pend,midStr,i+1,mend);
            }
            return root;   
    }
 
}
相關文章
相關標籤/搜索