package com.cool.hot100.binary_tree;

import org.junit.Test;

import java.util.HashMap;
import java.util.Map;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author: Cool
 * @Date: 2024/09/01/19:34
 * DayNumber 2
 * Hard 2
 * Level 5
 */
public class Num105 {

    Map<Integer, Integer> map = new HashMap<>();

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        for (int i = 0; i < inorder.length; i++) {
            map.put(inorder[i], i);
        }
        return buildTree(preorder, 0, 0, inorder.length - 1);
    }

    public TreeNode buildTree(int[] preorder, int indexInPre, int startInIn, int endInIn) {
        if (startInIn > endInIn) return null;
        TreeNode node = new TreeNode(preorder[indexInPre]);
        Integer headInIn = map.get(preorder[indexInPre]);
        int leftLength = headInIn - startInIn;
        node.left = buildTree(preorder,indexInPre+1,startInIn,headInIn-1);
        node.right=buildTree(preorder,indexInPre+leftLength+1,headInIn+1,endInIn);
        return node;
    }

    @Test
    public void test() {
//        TreeNode node1 = new TreeNode(6);
//        TreeNode node2 = new TreeNode(2);
//        TreeNode node3 = new TreeNode(4);
//        TreeNode node4 = new TreeNode(3);
//        TreeNode node5 = new TreeNode(5);
//        TreeNode node6 = new TreeNode(2);
//        TreeNode node7 = new TreeNode(1);
//        node7.left = node6;
//        node7.right = node5;
//        node6.left = node4;
//        node6.right = node3;
//        node5.right = node1;
        buildTree(new int[]{3, 9, 20, 15, 7}, new int[]{9, 3, 15, 20, 7});
    }
}