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
| Definition for a binary tree node. public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; this.left = left; this.right = right; } }
class Solution { public TreeNode deduceTree(int[] preorder, int[] inorder) { if (preorder.length==0) return null; TreeNode root = new TreeNode(preorder[0]); findroot(preorder, inorder, root); return root; }
public TreeNode findroot(int[] preorder, int[] inorder, TreeNode root) { root.val = preorder[0]; int i=0; while(inorder[i]!=preorder[0]) i++; if(i!=0){ int[] preorder_left = Arrays.copyOfRange(preorder,1,i+1); int[] inorder_left = Arrays.copyOfRange(inorder,0,i); root.left = new TreeNode(); findroot(preorder_left,inorder_left,root.left); } if(i!=preorder.length-1){ int[] preorder_right = Arrays.copyOfRange(preorder,i+1,preorder.length); int[] inorder_right = Arrays.copyOfRange(inorder,i+1,inorder.length); root.right = new TreeNode(); findroot(preorder_right,inorder_right,root.right); } return root; } }
|