LeetCode/src/main/java/com/cool/hot100/binary_tree/Num105.java

57 lines
1.6 KiB
Java

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