**Problem:**

Given inorder and postorder traversal of a tree, construct the binary tree.

**Note:**

You may assume that duplicates do not exist in the tree.

**Solution:**

/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
int[] inorder, postorder;
int current;
public TreeNode buildTree(int[] inorder, int[] postorder) {
if (inorder == null || postorder == null || inorder.length != postorder.length) return null;
this.inorder = inorder; this.postorder = postorder;
current = postorder.length - 1;
return buildTree(0, inorder.length - 1);
}
private int findIndex(int post) {
for (int i = 0; i < inorder.length; i++)
if (inorder[i] == postorder[post]) return i;
return -1;
}
private TreeNode buildTree(int start, int end) {
if (start > end) return null;
TreeNode root = new TreeNode(postorder[current]);
int index = findIndex(current);
current--;
root.right = buildTree(index + 1, end);
root.left = buildTree(start, index - 1);
return root;
}
}

*Related*