【题目】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);
	}
}
发布了233 篇原创文章 · 获赞 254 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_44485744/article/details/105012630