105. 从前序与中序遍历序列构造二叉树

class Solution {
	HashMap<Integer,Integer> inhm  = new HashMap<Integer,Integer>();
	public TreeNode buildTree(int[] preorder, int[] inorder) {
		inhm.clear();
		for(int i = 0 ; i<preorder.length;i++) {
			inhm.put(inorder[i], i);
		}
		int n = preorder.length;
		return dfs(preorder, inorder , 0,n-1 , 0 , n-1);
	}
	public TreeNode dfs(int[]preorder,int[]inorder,int pl , int pr , int il ,int ir) {
		if(pl>pr)return null;
		TreeNode root = new TreeNode(preorder[pl]);
		int k = inhm.get(preorder[pl]);
		int len = k - il;
		root.left = dfs(preorder , inorder , pl+1 ,pl+len ,il ,k-1 );
		root.right = dfs(preorder , inorder , pl+len+1, pr, k+1, ir);
		return root;
	}
}
原文地址:https://www.cnblogs.com/cznczai/p/11351287.html