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}); } }