Skip to content

Commit 14311e4

Browse files
authored
fix: update solutions to lc problems: No.105,106 (doocs#2359)
1 parent 58a4c04 commit 14311e4

File tree

7 files changed

+42
-53
lines changed

7 files changed

+42
-53
lines changed

solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README.md

+21-30
Original file line numberDiff line numberDiff line change
@@ -99,13 +99,11 @@ class Solution:
9999
*/
100100
class Solution {
101101
private int[] preorder;
102-
private int[] inorder;
103102
private Map<Integer, Integer> d = new HashMap<>();
104103

105104
public TreeNode buildTree(int[] preorder, int[] inorder) {
106105
int n = preorder.length;
107106
this.preorder = preorder;
108-
this.inorder = inorder;
109107
for (int i = 0; i < n; ++i) {
110108
d.put(inorder[i], i);
111109
}
@@ -337,43 +335,36 @@ class Solution:
337335
```
338336

339337
```java
340-
/**
341-
* Definition for a binary tree node.
342-
* public class TreeNode {
343-
* int val;
344-
* TreeNode left;
345-
* TreeNode right;
346-
* TreeNode() {}
347-
* TreeNode(int val) { this.val = val; }
348-
* TreeNode(int val, TreeNode left, TreeNode right) {
349-
* this.val = val;
350-
* this.left = left;
351-
* this.right = right;
352-
* }
353-
* }
354-
*/
355338
class Solution {
356-
private int[] preorder;
357-
private Map<Integer, Integer> d = new HashMap<>();
339+
private List<Integer> preorder;
340+
private Map<Integer, List<Integer>> d = new HashMap<>();
358341

359-
public TreeNode buildTree(int[] preorder, int[] inorder) {
360-
int n = preorder.length;
361-
this.preorder = preorder;
342+
public List<TreeNode> getBinaryTrees(List<Integer> preOrder, List<Integer> inOrder) {
343+
int n = preOrder.size();
344+
this.preorder = preOrder;
362345
for (int i = 0; i < n; ++i) {
363-
d.put(inorder[i], i);
346+
d.computeIfAbsent(inOrder.get(i), k -> new ArrayList<>()).add(i);
364347
}
365348
return dfs(0, 0, n);
366349
}
367350

368-
private TreeNode dfs(int i, int j, int n) {
351+
private List<TreeNode> dfs(int i, int j, int n) {
352+
List<TreeNode> ans = new ArrayList<>();
369353
if (n <= 0) {
370-
return null;
354+
ans.add(null);
355+
return ans;
371356
}
372-
int v = preorder[i];
373-
int k = d.get(v);
374-
TreeNode l = dfs(i + 1, j, k - j);
375-
TreeNode r = dfs(i + 1 + k - j, k + 1, n - 1 - (k - j));
376-
return new TreeNode(v, l, r);
357+
int v = preorder.get(i);
358+
for (int k : d.get(v)) {
359+
if (k >= j && k < j + n) {
360+
for (TreeNode l : dfs(i + 1, j, k - j)) {
361+
for (TreeNode r : dfs(i + 1 + k - j, k + 1, n - 1 - (k - j))) {
362+
ans.add(new TreeNode(v, l, r));
363+
}
364+
}
365+
}
366+
}
367+
return ans;
377368
}
378369
}
379370
```

solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README_EN.md

-2
Original file line numberDiff line numberDiff line change
@@ -95,13 +95,11 @@ class Solution:
9595
*/
9696
class Solution {
9797
private int[] preorder;
98-
private int[] inorder;
9998
private Map<Integer, Integer> d = new HashMap<>();
10099

101100
public TreeNode buildTree(int[] preorder, int[] inorder) {
102101
int n = preorder.length;
103102
this.preorder = preorder;
104-
this.inorder = inorder;
105103
for (int i = 0; i < n; ++i) {
106104
d.put(inorder[i], i);
107105
}

solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution.java

-2
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@
1515
*/
1616
class Solution {
1717
private int[] preorder;
18-
private int[] inorder;
1918
private Map<Integer, Integer> d = new HashMap<>();
2019

2120
public TreeNode buildTree(int[] preorder, int[] inorder) {
2221
int n = preorder.length;
2322
this.preorder = preorder;
24-
this.inorder = inorder;
2523
for (int i = 0; i < n; ++i) {
2624
d.put(inorder[i], i);
2725
}

solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution2.java

+21-13
Original file line numberDiff line numberDiff line change
@@ -14,26 +14,34 @@
1414
* }
1515
*/
1616
class Solution {
17-
private int[] preorder;
18-
private Map<Integer, Integer> d = new HashMap<>();
17+
private List<Integer> preorder;
18+
private Map<Integer, List<Integer>> d = new HashMap<>();
1919

20-
public TreeNode buildTree(int[] preorder, int[] inorder) {
21-
int n = preorder.length;
22-
this.preorder = preorder;
20+
public List<TreeNode> getBinaryTrees(List<Integer> preOrder, List<Integer> inOrder) {
21+
int n = preOrder.size();
22+
this.preorder = preOrder;
2323
for (int i = 0; i < n; ++i) {
24-
d.put(inorder[i], i);
24+
d.computeIfAbsent(inOrder.get(i), k -> new ArrayList<>()).add(i);
2525
}
2626
return dfs(0, 0, n);
2727
}
2828

29-
private TreeNode dfs(int i, int j, int n) {
29+
private List<TreeNode> dfs(int i, int j, int n) {
30+
List<TreeNode> ans = new ArrayList<>();
3031
if (n <= 0) {
31-
return null;
32+
ans.add(null);
33+
return ans;
3234
}
33-
int v = preorder[i];
34-
int k = d.get(v);
35-
TreeNode l = dfs(i + 1, j, k - j);
36-
TreeNode r = dfs(i + 1 + k - j, k + 1, n - 1 - (k - j));
37-
return new TreeNode(v, l, r);
35+
int v = preorder.get(i);
36+
for (int k : d.get(v)) {
37+
if (k >= j && k < j + n) {
38+
for (TreeNode l : dfs(i + 1, j, k - j)) {
39+
for (TreeNode r : dfs(i + 1 + k - j, k + 1, n - 1 - (k - j))) {
40+
ans.add(new TreeNode(v, l, r));
41+
}
42+
}
43+
}
44+
}
45+
return ans;
3846
}
3947
}

solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README.md

-2
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,9 @@ class Solution:
9494
*/
9595
class Solution {
9696
private Map<Integer, Integer> d = new HashMap<>();
97-
private int[] inorder;
9897
private int[] postorder;
9998

10099
public TreeNode buildTree(int[] inorder, int[] postorder) {
101-
this.inorder = inorder;
102100
this.postorder = postorder;
103101
int n = inorder.length;
104102
for (int i = 0; i < n; ++i) {

solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README_EN.md

-2
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,9 @@ class Solution:
9090
*/
9191
class Solution {
9292
private Map<Integer, Integer> d = new HashMap<>();
93-
private int[] inorder;
9493
private int[] postorder;
9594

9695
public TreeNode buildTree(int[] inorder, int[] postorder) {
97-
this.inorder = inorder;
9896
this.postorder = postorder;
9997
int n = inorder.length;
10098
for (int i = 0; i < n; ++i) {

solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/Solution.java

-2
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,9 @@
1515
*/
1616
class Solution {
1717
private Map<Integer, Integer> d = new HashMap<>();
18-
private int[] inorder;
1918
private int[] postorder;
2019

2120
public TreeNode buildTree(int[] inorder, int[] postorder) {
22-
this.inorder = inorder;
2321
this.postorder = postorder;
2422
int n = inorder.length;
2523
for (int i = 0; i < n; ++i) {

0 commit comments

Comments
 (0)