Construct Binary Tree from Preorder and Inorder Traversal

recursion programming

 1 public class Solution {
 2     public TreeNode buildTree(int[] preorder, int[] inorder) {
 3         // IMPORTANT: Please reset any member data you declared, as
 4         // the same Solution instance will be reused for each test case.
 5         if(preorder == null)
 6             return null;
 7         return buildTree(preorder, inorder, 0, preorder.length, 0, inorder.length);
 8     }
 9     
10     private TreeNode buildTree(int[] preorder, int[] inorder, int preorderStart, int preorderEnd, int inorderStart, int inorderEnd)
11     {
12         if(preorderStart >= preorderEnd)
13             return null;
14         TreeNode tmp = new TreeNode(preorder[preorderStart]);
15         if(preorderEnd - preorderStart == 1)
16             return tmp;
17         int newinorderStart = inorderStart;
18         
19         while(inorder[newinorderStart] != preorder[preorderStart])
20         {
21             newinorderStart++;
22         }
23         
24         int newpreorderStart = preorderStart + 1;
25         int newpreorderEnd = newpreorderStart + (newinorderStart - inorderStart);
26         tmp.left = buildTree(preorder, inorder, newpreorderStart, newpreorderEnd, inorderStart, newinorderStart);
27         tmp.right = buildTree(preorder, inorder, newpreorderEnd, preorderEnd, newinorderStart+1, inorderEnd);
28         return tmp;
29     }
30 }
原文地址:https://www.cnblogs.com/jasonC/p/3414265.html