【題目】Problem C.二叉樹

Problem C.二叉樹

題目描述
輸入二叉樹的前序遍歷和中序遍歷結果,輸出二叉樹的後序遍歷結果

輸入格式
第一行爲二叉樹先序遍歷結果
第二行爲二叉樹中序遍歷結果。

輸出格式
二叉樹後序遍歷結果。

Example
Inputs

426315
623415

Outputs
632514

import java.util.Scanner;
/*
Problem C.二叉樹
題目描述
輸入二叉樹的前序遍歷和中序遍歷結果,輸出二叉樹的後序遍歷結果
輸入格式
第一行爲二叉樹先序遍歷結果
第二行爲二叉樹中序遍歷結果。
輸出格式
二叉樹後序遍歷結果。
Example
Inputs
426315
623415
Outputs
632514
*/


class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int x) { val = x; }
}

public class Test{
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		while(scanner.hasNext()) {
			String dlr = scanner.next();
			String ldr = scanner.next();
			int[] DLR = new int[dlr.length()];
			int[] LDR = new int[ldr.length()];
			for(int i = 0; i < dlr.length(); i++) {
				DLR[i] = dlr.charAt(i) - '0';
				LDR[i] = ldr.charAt(i) - '0';
			}
			TreeNode root = reConstructBinaryTree(DLR, LDR);
			LRD(root);
		}	
	}	
	public static TreeNode reConstructBinaryTree(int [] pre,int [] in) {
        TreeNode root = reConstructBinaryTree(pre, 0, pre.length-1, in, 0, in.length-1);
        return root;
	}
	public static TreeNode reConstructBinaryTree(int[] pre, int startPre, int endPre, int[] in, int startIn, int endIn){//pre是前序遍歷,in是中序遍歷
        if(startPre > endPre || startIn > endIn){
            return null;
        }
        // 根據前序遍歷結果,創建根節點
        TreeNode root  = new TreeNode(pre[startPre]);
        // 在中序遍歷的結果中找到根節點,找到其左右結點
        //【4】 2 6 3 1 5
        //6 2 3 【4】 1 5
        for(int i = startIn; i <= endIn; i++){
            if(in[i] == pre[startPre]){
                root.left = reConstructBinaryTree(pre, startPre+1, startPre+i-startIn, in, startIn, i-1); //左孩子是中序遍歷根節點左子樹的根節點
                root.right = reConstructBinaryTree(pre, i-startIn+startPre+1, endPre, in, i+1, endIn);//右孩子是中序遍歷根節點右子樹的根節點
            }
        }
        return root;
    }
	public static void LRD(TreeNode head) {
		if(head.left != null) LRD(head.left);
		if(head.right != null) LRD(head.right);
		System.out.print(head.val);
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章