Guest User

Untitled

a guest
Jul 19th, 2018
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.38 KB | None | 0 0
  1. //Recursive solution
  2. //Time: O(n), 3ms
  3. //Space: O(h)
  4. class Solution {
  5. public TreeNode buildTree(int[] inorder, int[] postorder) {
  6. //Hash all the value in a HashTable so that we can look up the index in the inorder of a value in O(1) time
  7. Map<Integer, Integer> map = new HashMap<>();
  8. for(int i = 0; i < inorder.length; i++) {
  9. map.put(inorder[i], i);
  10. }
  11. return buildTreeR(inorder, postorder, 0, inorder.length, 0, postorder.length, map);
  12. }
  13.  
  14. private TreeNode buildTreeR(int[] inorder, int[] postorder, int inBegin, int inEnd, int postBegin, int postEnd, Map<Integer, Integer> map) {
  15. if(inBegin == inEnd && postBegin == postEnd) return null;
  16. //The Last node of post-order is the root of the tree
  17. TreeNode root = new TreeNode(postorder[postEnd - 1]);
  18. int rootIndex = map.get(postorder[postEnd - 1]);
  19. //The left subtree and right subtree are divided by the root
  20. root.left = buildTreeR(inorder, postorder, inBegin, rootIndex, postBegin, postBegin + (rootIndex - inBegin), map);
  21. root.right = buildTreeR(inorder, postorder, rootIndex + 1, inEnd, postBegin + (rootIndex - inBegin), postEnd - 1, map);
  22. return root;
  23. }
  24. }
  25. /**
  26. * Definition for a binary tree node.
  27. * public class TreeNode {
  28. * int val;
  29. * TreeNode left;
  30. * TreeNode right;
  31. * TreeNode(int x) { val = x; }
  32. * }
  33. */
Add Comment
Please, Sign In to add comment