前序遍历序列为根左右顺序,中序遍历序列为左根右。
int pre[]前序遍历序列
preL 当前处理的序列在pre[]中的开始位置
preR 当前处理的序列在pre[]中的结束位置
inL 当前处理的序列在in[](中序序列)的开始位置
import java.util.*; public class Solution { private HashMap<Integer,Integer> indexForInOrders = new HashMap<>(); public TreeNode reConstructBinaryTree(int[] pre, int[] in) { for (int i = 0; i < in.length; i++) indexForInOrders.put(in[i], i); return reConstructBinaryTree(pre, 0, pre.length-1 , 0); } private TreeNode reConstructBinaryTree(int[] pre, int preL, int preR, int inL) { if (preL > preR) return null; TreeNode root = new TreeNode(pre[preL]); int index = indexForInOrders.get(root.val); int leftTreeSize = index-inL; root.left = reConstructBinaryTree(pre,preL+1,preL+leftTreeSize,inL); root.right = reConstructBinaryTree(pre,preL+leftTreeSize+1,preR,inL+leftTreeSize+1); return root; } }