[LeetCode] 106. Construct Binary Tree from Inorder and Postorder Traversal
Given inorder and postorder traversal of a tree, construct the binary tree.
Note:
You may assume that duplicates do not exist in the tree.
You may assume that duplicates do not exist in the tree.
Thought process:
Similar to 105. Construct Binary Tree from Preorder and Inorder Traversal. Iterate from end to beginning of the post-order traversal. Attach right sub-tree to root before left.
Solution:
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 | /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public TreeNode buildTree(int[] inorder, int[] postorder) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < inorder.length; i++) { map.put(inorder[i], i); } return buildTree(map, postorder, postorder.length - 1, 0, postorder.length - 1); } private TreeNode buildTree(Map<Integer, Integer> inorder, int[] postorder, int postIndex, int left, int right) { if (postIndex < 0 || left > right) { return null; } int inIndex = inorder.get(postorder[postIndex]); TreeNode node = new TreeNode(postorder[postIndex]); node.right = buildTree(inorder, postorder, postIndex - 1, inIndex + 1, right); node.left = buildTree(inorder, postorder, postIndex - (right - inIndex + 1), left, inIndex - 1); return node; } } |
Time complexity: O(n).
Comments
Post a Comment