1. 给定两个整数数组 inorder postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树
    2. 示例 1:
    3. 输入:inorder = [9,3,15,20,7], postorder = [9,15,7,20,3]
    4. 输出:[3,9,20,null,null,15,7]

    image.png

    1. /**
    2. * Definition for a binary tree node.
    3. * public class TreeNode {
    4. * int val;
    5. * TreeNode left;
    6. * TreeNode right;
    7. * TreeNode() {}
    8. * TreeNode(int val) { this.val = val; }
    9. * TreeNode(int val, TreeNode left, TreeNode right) {
    10. * this.val = val;
    11. * this.left = left;
    12. * this.right = right;
    13. * }
    14. * }
    15. */
    16. class Solution {
    17. Map<Integer,Integer> myMap = new HashMap();
    18. public TreeNode buildTree(int[] inorder, int[] postorder) {
    19. for(int i=0; i < inorder.length; i++) myMap.put(inorder[i],i);
    20. return backTracking(inorder,postorder, 0, postorder.length, 0, inorder.length);
    21. }
    22. public TreeNode backTracking(int[] inorder, int[] postorder,
    23. int pStart, int pEnd, int iStart, int iEnd){
    24. if(pStart == pEnd) return null;
    25. int rootVal = postorder[pEnd-1];
    26. TreeNode root = new TreeNode(rootVal);
    27. int inorderIdx = myMap.get(rootVal);
    28. int leftNum = inorderIdx - iStart;
    29. root.left = backTracking(inorder, postorder,
    30. pStart, pStart+leftNum, iStart, inorderIdx);
    31. root.right = backTracking(inorder, postorder,
    32. pStart+leftNum, pEnd-1, inorderIdx+1, iEnd);
    33. return root;
    34. }
    35. }