1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| package eternal.fire;
import java.io.IOException;
public class LeetCode { public static void main(String[] args) throws IOException { Solution solution = new Solution(); int[] preorder = new int[]{3, 9, 20, 15, 7}; int[] inorder = new int[]{9, 3, 15, 20, 7}; TreeNode root = solution.buildTree(preorder, inorder); } }
class TreeNode { int val; TreeNode left; TreeNode right;
TreeNode(int x) { val = x; } }
class Solution { public TreeNode buildTree(int[] preorder, int[] inorder) { if (preorder.length == 0) { return null; }
TreeNode root = new TreeNode(preorder[0]);
int[] left1, left2, right1, right2;
if (preorder[0] == inorder[0]) { left1 = new int[0]; left2 = new int[0]; } else { int index1 = 0; for (int i = 0; i < inorder.length; i++) { if (inorder[i] == preorder[0]) { index1 = i; break; } } left2 = new int[index1]; System.arraycopy(inorder, 0, left2, 0, index1);
left1 = new int[index1]; System.arraycopy(preorder, 1, left1, 0, index1); }
if (left1.length + 1 == preorder.length) { right1 = new int[0]; right2 = new int[0]; } else { int index2 = 1 + left1.length; right2 = new int[preorder.length - 1 - left1.length]; System.arraycopy(inorder, index2, right2, 0, preorder.length - 1 - left1.length);
right1 = new int[right2.length]; System.arraycopy(preorder, index2, right1, 0, preorder.length - 1 - left1.length); }
root.left = buildTree(left1, left2);
root.right = buildTree(right1, right2);
return root; } }
|