1. 程式人生 > 實用技巧 >筆試-2020年西山居Java筆試題(補上,一直忘記補上了)

筆試-2020年西山居Java筆試題(補上,一直忘記補上了)

2020年西山居Java筆試題

當初參加西山居時候第一道演算法題,一直想做來著,給耽誤了,補上

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

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

示例1

輸入

ABDEC DBEAC

輸出

DEBCA
思路:先根據先序、中序序列建立二叉樹,然後後序遍歷
package 雜題彙總;

import java.util.Scanner;

/**
 * @author :Empirefree
 * @description:TODO
 * @date :2021/1/19 10:25
 */
public class PreAndMid {
    public static class TreeNode {
        char val;
        TreeNode left;
        TreeNode right;
        TreeNode(char x) { val = x; }
    }
    /*
    * 2020年西山居Java筆試題--先序中序構建二叉樹並求後序
    *
    * Case:ABDEC DBEAC   輸出:DEBCA
     * */
    //TODO:陣列傳遞,類傳遞
    //TODO:static final

    public static TreeNode createTreeNode(char[] preChar, int preStart, int preEnd, char[] midChar, int midStart, int midEnd){
        if (preStart >= preEnd || midStart >= midEnd) return null;
        TreeNode rootNode = new TreeNode(preChar[preStart]);

        for (int i = midStart; i < midEnd; i++) {
            if (preChar[preStart] == midChar[i]){
                int midPreLen = i - midStart;
                rootNode.left = createTreeNode(preChar, preStart + 1, preStart + 1 + midPreLen, midChar, midStart, i);
                rootNode.right = createTreeNode(preChar, preStart + 1 + midPreLen, preEnd, midChar, i + 1, midEnd);
            }
        }
        return rootNode;
    }

    public static void postTravel(TreeNode rootTree){
        if (rootTree != null){
            postTravel(rootTree.left);
            postTravel(rootTree.right);
            System.out.print(rootTree.val);
        }
    }
    public static void main(String[] args) {
        //1、資料輸入
        final Scanner scanner = new Scanner(System.in);
        char[] preChar = scanner.nextLine().toCharArray();
        char[] midChar = scanner.nextLine().toCharArray();

        //2、構建二叉樹
        TreeNode rootTree = createTreeNode(preChar, 0, preChar.length, midChar, 0, midChar.length);
        //3、後序輸出
        postTravel(rootTree);
    }
}