106. 从中序与后序遍历序列构造二叉树

自己做

解:后序遍历
/*** 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;* }* }*/
class Solution {private Map<Integer, Integer> m = new HashMap<Integer, Integer>();private int index;public TreeNode postTravel(int[] inorder, int[] postorder, int begin, int end){if(begin > end)return null;int mid = m.get(postorder[index]); //分割点TreeNode root = new TreeNode(postorder[index--]); //中TreeNode right = postTravel(inorder, postorder, mid + 1, end); //右TreeNode left = postTravel(inorder, postorder, begin, mid - 1); //左root.right = right;root.left = left;return root;}public TreeNode buildTree(int[] inorder, int[] postorder) {index = inorder.length - 1;for(int i = 0; i < inorder.length; i++)m.put(inorder[i], i);return postTravel(inorder, postorder, 0, inorder.length - 1);}
}
