Guest User

Untitled

a guest
Jul 15th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.27 KB | None | 0 0
  1. /**
  2. * Definition for a binary tree node.
  3. * public class TreeNode {
  4. * int val;
  5. * TreeNode left;
  6. * TreeNode right;
  7. * TreeNode(int x) { val = x; }
  8. * }
  9. */
  10. class Solution {
  11. public TreeNode buildTree(int[] preorder, int[] inorder) {
  12.  
  13. return helper (0, 0, inorder.length - 1, preorder, inorder);
  14. }
  15.  
  16. private TreeNode helper(int preStart, int inStart, int inEnd, int[] preorder, int[] inorder) {
  17.  
  18. //base condition
  19. if (preStart > preorder.length - 1 || inStart > inEnd)
  20. return null;
  21.  
  22. //get the root node with curr preorder element
  23. TreeNode root = new TreeNode(preorder[preStart]);
  24.  
  25. //get inIndex; finding preorder's element's index in inorder
  26. int inIndex = 0;
  27.  
  28. for (int i = inStart; i <= inEnd; i++) {
  29. if(inorder[i] == root.val) {
  30. inIndex = i;
  31. }
  32. }
  33. //(next, left of inIndex is the end for left subtree)
  34. root.left = helper(preStart + 1, inStart, inIndex - 1, preorder, inorder);
  35. //(prestart + length of left subtree + 1)
  36. root.right = helper(preStart + inIndex - inStart + 1, inIndex + 1, inEnd, preorder, inorder);
  37.  
  38. return root;
  39. }
  40. //T O(n) S O(n)
  41. }
Add Comment
Please, Sign In to add comment