Skip to content

Commit 252c296

Browse files
solves #106 in java
1 parent fb13702 commit 252c296

4 files changed

+51
-4
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@
9898
| 103 | [Binary Tree Zigzag Level Order Traversal](https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal) | [![Java](assets/java.png)](src/BinaryTreeZigzagLevelOrderTraversal.java) | |
9999
| 104 | [Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree) | [![Java](assets/java.png)](src/MaximumDepthOfBinaryTree.java) [![Python](assets/python.png)](python/maximum_depth_of_binary_tree.py) | |
100100
| 105 | [Construct Binary Tree from Preorder and Inorder Traversal](https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal) | [![Java](assets/java.png)](src/ConstructBinaryTreeFromPreorderAndInorderTraversal.java) | |
101-
| 106 | [Construct Binary Tree from Inorder and Postorder Traversal](https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal) | | |
101+
| 106 | [Construct Binary Tree from Inorder and Postorder Traversal](https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal) | [![Java](assets/java.png)](src/ConstructBinaryTreeFromInorderAndPostorderTraversal.java) | |
102102
| 107 | [Binary Tree Level Order Traversal II](https://leetcode.com/problems/binary-tree-level-order-traversal-ii) | [![Java](assets/java.png)](src/BinaryTreeLevelOrderTraversalII.java) [![Python](assets/python.png)](python/binary_tree_level_order_traversal_ii.py) | |
103103
| 108 | [Convert Sorted Array To Binary Search Tree](https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree) | [![Java](assets/java.png)](src/ConvertSortedArrayToBinarySearchTree.java) [![Python](assets/python.png)](python/converted_sorted_array_to_binary_search_tree.py) | |
104104
| 109 | [Convert Sorted List to Binary Search Tree](https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree) | | |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
// https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal
2+
// T: O(n)
3+
// S: O(n)
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
public class ConstructBinaryTreeFromInorderAndPostorderTraversal {
9+
Map<Integer, Integer> inOrderIndices;
10+
int[] postOrder;
11+
12+
public TreeNode buildTree(int[] inorder, int[] postorder) {
13+
inOrderIndices = getIndicesMap(inorder);
14+
this.postOrder = postorder;
15+
return buildTreePostIn(0, inorder.length - 1, 0, postorder.length - 1);
16+
}
17+
18+
private TreeNode buildTreePostIn(int is, int ie, int ps, int pe){
19+
if (ps > pe || is > ie) return null;
20+
final TreeNode root = new TreeNode(postOrder[pe]);
21+
int ri = inOrderIndices.get(postOrder[pe]);
22+
root.left = buildTreePostIn(is, ri-1, ps, ps+ri-is-1);
23+
root.right = buildTreePostIn(ri+1, ie, ps+ri-is, pe-1);
24+
return root;
25+
}
26+
27+
private Map<Integer, Integer> getIndicesMap(int[] array) {
28+
final Map<Integer, Integer> result = new HashMap<>(array.length);
29+
for (int index = 0 ; index < array.length ; index++) {
30+
result.put(array[index], index);
31+
}
32+
return result;
33+
}
34+
}

Diff for: src/ConstructBinaryTreeFromPreorderAndInorderTraversal.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public TreeNode buildTree(int[] preorder, int[] inorder) {
1515
}
1616

1717
private TreeNode buildTree(int[] preOrder, int[] inOrder, int start, int end) {
18-
if (start >= end) return null;
18+
if (start == end) return null;
1919

2020
int inOrderIndex = inOrderIndices.get(preOrder[preOrderIndex]);
2121
final TreeNode root = new TreeNode(preOrder[preOrderIndex++]);

Diff for: src/HelloWorld.java

+15-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,20 @@
44

55
public class HelloWorld {
66
public static void main(String[] args) {
7-
List<Integer> list = new ArrayList<>();
8-
Collections.reverse(list);
7+
// ConstructBinaryTreeFromInorderAndPostorderTraversal c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
8+
// TreeNode treeNode = c.buildTree(new int[] {9, 3, 15, 20, 7}, new int[] {9, 15, 7, 20, 3});
9+
// TreePrinter.print(treeNode);
10+
//
11+
// c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
12+
// treeNode = c.buildTree(new int[] {2, 1}, new int[] {2, 1});
13+
// TreePrinter.print(treeNode);
14+
//
15+
// c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
16+
// treeNode = c.buildTree(new int[] {-1}, new int[] {-1});
17+
// TreePrinter.print(treeNode);
18+
19+
ConstructBinaryTreeFromInorderAndPostorderTraversal c = new ConstructBinaryTreeFromInorderAndPostorderTraversal();
20+
TreeNode treeNode = c.buildTree(new int[] {1, 2, 3, 4}, new int[] {2, 1, 3, 4});
21+
TreePrinter.print(treeNode);
922
}
1023
}

0 commit comments

Comments
 (0)