题目描述

题解
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val
* TreeNode left
* TreeNode right
* TreeNode() {}
* TreeNode(int val) { this.val = val
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val
* this.left = left
* this.right = right
* }
* }
*/
// 本题和【剑指offer】07. 重建二叉树 一模一样
//
// 执行用时:2 ms, 在所有 Java 提交中击败了98.29%的用户
// 内存消耗:38.6 MB, 在所有 Java 提交中击败了44.28%的用户q
class Solution {
public Map<Integer, Integer> inOrderIndex = new HashMap<>()
public TreeNode buildTree(int[] preorder, int[] inorder) {
if (preorder.length == 0 || inorder.length == 0)
return null
for (int i = 0
inOrderIndex.put(inorder[i], i)
return buildTree(preorder, 0, preorder.length - 1, 0)
}
private TreeNode buildTree(int[] pre, int preL, int preR, int inL) {
if (preL > preR)
return null
TreeNode root = new TreeNode(pre[preL])
int inIndex = inOrderIndex.get(pre[preL])
int leftTreeSize = inIndex - inL
root.left = buildTree(pre, preL + 1, preL + leftTreeSize, inL)
root.right = buildTree(pre, preL + leftTreeSize + 1, preR, inL + leftTreeSize + 1)
return root
}
}