import java.util.HashMap; /** * Definition for a binary tree node. public class TreeNode { int val; TreeNode * left; TreeNode right; TreeNode(int x) { val = x; } } */ class Solution { public TreeNode buildTree(int[] afterorder, int[] inorder) { int hb=0; int he=afterorder.length-1; int zb =0; int ze = inorder.length-1; HashMap<Integer,Integer> map = new HashMap<>(); for(int i=0;i<=ze;i++){ map.put(inorder[i], i); } TreeNode treeNode = re( map,afterorder, hb, he, zb, ze); return treeNode; } public TreeNode re(HashMap map,int[] after,int hb,int he,int zb,int ze) { if(hb>he)return null; TreeNode mid = new TreeNode(after[he]); if(hb==he)return mid; int k = (int) map.get(after[he]); TreeNode left = re(map, after, hb, hb+k-zb-1, zb, k-1); TreeNode right = re(map, after, hb+k-zb, he-1, k+1, ze); mid.left = left; mid.right = right; return mid; } public static void main(String[] args) { Solution so = new Solution(); int[] afterorder = new int[]{9,15,7,20,3}; int[] inorder = new int[]{9,3,15,20,7}; so.buildTree(afterorder, inorder); } }