My JAVA recursive answer, BEAT 92.9%, 2ms
public TreeNode buildTree(int[] inorder, int[] postorder) {\n        return build(inorder,inorder.length-1,0,postorder,postorder.length-1);\n    }\n    \n    pu
    public TreeNode buildTree(int[] inorder, int[] postorder) {\n        return build(inorder,inorder.length-1,0,postorder,postorder.length-1);\n    }\n    \n    public TreeNode build(int[] inorder, int inStart, int inEnd, int[] postorder, int postStart){\n    \tif(inEnd > inStart){\n    \t\treturn null;\n    \t}\n    \tTreeNode root = new TreeNode(postorder[postStart]);\n    \tif(inEnd == inStart){\n    \t\treturn root;\n    \t}\n    \tint index = 0;\n    \t// find the index in inorder:\n    \tfor(int i = inStart; i >= inEnd; i--){\n    \t\tif(inorder[i] == root.val){\n    \t\t\tindex = i;\n    \t\t\tbreak;\n    \t\t}\n    \t}\n    \t\n    \troot.right = build(inorder,inStart,index+1,postorder,postStart-1);\n    \troot.left = build(inorder,index-1,inEnd,postorder,postStart-(inStart-index)-1);\n    \t\n    \treturn root;\n    }
[]