Construct Binary Tree from Inorder and Postorder Traversal

 1 public class Solution {
 2     public TreeNode buildTree(int[] inorder, int[] postorder) {
 3         // IMPORTANT: Please reset any member data you declared, as
 4         // the same Solution instance will be reused for each test case.
 5         if(inorder == null||postorder == null||inorder.length == 0||postorder.length==0)
 6             return null;
 7         return buildTree(inorder, postorder, 0, inorder.length-1, 0 ,inorder.length-1);
 8     }
 9     
10     private TreeNode buildTree(int[] inorder, int[] postorder, int instart, int inend, int postart, int poend)
11     {
12         if(instart > inend)
13             return null;
14         TreeNode node = new TreeNode(postorder[poend]);
15         if(instart == inend)
16             return node;
17         int mid = 0;
18         for(int i = instart; i <= inend; i++)
19         {
20             if(inorder[i] == postorder[poend])
21             {
22                 mid = i;
23                 break;
24             }
25         }
26         node.left = buildTree(inorder, postorder, instart, mid - 1, postart, postart + (mid - 1 - instart));
27         node.right = buildTree(inorder, postorder, mid + 1, inend, poend + mid - inend, poend - 1);
28         return node;
29     }
30 }
原文地址:https://www.cnblogs.com/jasonC/p/3418213.html