From 1d4c9094c52845ee320820b4480806afadf4240c Mon Sep 17 00:00:00 2001 From: yanglbme Date: Tue, 20 Feb 2024 10:01:55 +0800 Subject: [PATCH] fix: update solutions to lc problems: No.105,106 --- .../README.md | 51 ++++++++----------- .../README_EN.md | 2 - .../Solution.java | 2 - .../Solution2.java | 34 ++++++++----- .../README.md | 2 - .../README_EN.md | 2 - .../Solution.java | 2 - 7 files changed, 42 insertions(+), 53 deletions(-) diff --git a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README.md b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README.md index 0bbc0205057ba..3083b5bb54d20 100644 --- a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README.md +++ b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README.md @@ -99,13 +99,11 @@ class Solution: */ class Solution { private int[] preorder; - private int[] inorder; private Map d = new HashMap<>(); public TreeNode buildTree(int[] preorder, int[] inorder) { int n = preorder.length; this.preorder = preorder; - this.inorder = inorder; for (int i = 0; i < n; ++i) { d.put(inorder[i], i); } @@ -337,43 +335,36 @@ class Solution: ``` ```java -/** - * Definition for a binary tree node. - * public class TreeNode { - * int val; - * TreeNode left; - * TreeNode right; - * TreeNode() {} - * TreeNode(int val) { this.val = val; } - * TreeNode(int val, TreeNode left, TreeNode right) { - * this.val = val; - * this.left = left; - * this.right = right; - * } - * } - */ class Solution { - private int[] preorder; - private Map d = new HashMap<>(); + private List preorder; + private Map> d = new HashMap<>(); - public TreeNode buildTree(int[] preorder, int[] inorder) { - int n = preorder.length; - this.preorder = preorder; + public List getBinaryTrees(List preOrder, List inOrder) { + int n = preOrder.size(); + this.preorder = preOrder; for (int i = 0; i < n; ++i) { - d.put(inorder[i], i); + d.computeIfAbsent(inOrder.get(i), k -> new ArrayList<>()).add(i); } return dfs(0, 0, n); } - private TreeNode dfs(int i, int j, int n) { + private List dfs(int i, int j, int n) { + List ans = new ArrayList<>(); if (n <= 0) { - return null; + ans.add(null); + return ans; } - int v = preorder[i]; - int k = d.get(v); - TreeNode l = dfs(i + 1, j, k - j); - TreeNode r = dfs(i + 1 + k - j, k + 1, n - 1 - (k - j)); - return new TreeNode(v, l, r); + int v = preorder.get(i); + for (int k : d.get(v)) { + if (k >= j && k < j + n) { + for (TreeNode l : dfs(i + 1, j, k - j)) { + for (TreeNode r : dfs(i + 1 + k - j, k + 1, n - 1 - (k - j))) { + ans.add(new TreeNode(v, l, r)); + } + } + } + } + return ans; } } ``` diff --git a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README_EN.md b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README_EN.md index 57e3fe44c481b..eed711e625668 100644 --- a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README_EN.md +++ b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/README_EN.md @@ -95,13 +95,11 @@ class Solution: */ class Solution { private int[] preorder; - private int[] inorder; private Map d = new HashMap<>(); public TreeNode buildTree(int[] preorder, int[] inorder) { int n = preorder.length; this.preorder = preorder; - this.inorder = inorder; for (int i = 0; i < n; ++i) { d.put(inorder[i], i); } diff --git a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution.java b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution.java index bc175b21f3df5..de6b5c7b0c156 100644 --- a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution.java +++ b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution.java @@ -15,13 +15,11 @@ */ class Solution { private int[] preorder; - private int[] inorder; private Map d = new HashMap<>(); public TreeNode buildTree(int[] preorder, int[] inorder) { int n = preorder.length; this.preorder = preorder; - this.inorder = inorder; for (int i = 0; i < n; ++i) { d.put(inorder[i], i); } diff --git a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution2.java b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution2.java index de6b5c7b0c156..9bfa3be21d13a 100644 --- a/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution2.java +++ b/solution/0100-0199/0105.Construct Binary Tree from Preorder and Inorder Traversal/Solution2.java @@ -14,26 +14,34 @@ * } */ class Solution { - private int[] preorder; - private Map d = new HashMap<>(); + private List preorder; + private Map> d = new HashMap<>(); - public TreeNode buildTree(int[] preorder, int[] inorder) { - int n = preorder.length; - this.preorder = preorder; + public List getBinaryTrees(List preOrder, List inOrder) { + int n = preOrder.size(); + this.preorder = preOrder; for (int i = 0; i < n; ++i) { - d.put(inorder[i], i); + d.computeIfAbsent(inOrder.get(i), k -> new ArrayList<>()).add(i); } return dfs(0, 0, n); } - private TreeNode dfs(int i, int j, int n) { + private List dfs(int i, int j, int n) { + List ans = new ArrayList<>(); if (n <= 0) { - return null; + ans.add(null); + return ans; } - int v = preorder[i]; - int k = d.get(v); - TreeNode l = dfs(i + 1, j, k - j); - TreeNode r = dfs(i + 1 + k - j, k + 1, n - 1 - (k - j)); - return new TreeNode(v, l, r); + int v = preorder.get(i); + for (int k : d.get(v)) { + if (k >= j && k < j + n) { + for (TreeNode l : dfs(i + 1, j, k - j)) { + for (TreeNode r : dfs(i + 1 + k - j, k + 1, n - 1 - (k - j))) { + ans.add(new TreeNode(v, l, r)); + } + } + } + } + return ans; } } \ No newline at end of file diff --git a/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README.md b/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README.md index 1271e3119ba60..6a2623052ecbf 100644 --- a/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README.md +++ b/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README.md @@ -94,11 +94,9 @@ class Solution: */ class Solution { private Map d = new HashMap<>(); - private int[] inorder; private int[] postorder; public TreeNode buildTree(int[] inorder, int[] postorder) { - this.inorder = inorder; this.postorder = postorder; int n = inorder.length; for (int i = 0; i < n; ++i) { diff --git a/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README_EN.md b/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README_EN.md index a04b251875862..5f78f13d92286 100644 --- a/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README_EN.md +++ b/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/README_EN.md @@ -90,11 +90,9 @@ class Solution: */ class Solution { private Map d = new HashMap<>(); - private int[] inorder; private int[] postorder; public TreeNode buildTree(int[] inorder, int[] postorder) { - this.inorder = inorder; this.postorder = postorder; int n = inorder.length; for (int i = 0; i < n; ++i) { diff --git a/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/Solution.java b/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/Solution.java index d40b90a3df4ac..99767e9536e52 100644 --- a/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/Solution.java +++ b/solution/0100-0199/0106.Construct Binary Tree from Inorder and Postorder Traversal/Solution.java @@ -15,11 +15,9 @@ */ class Solution { private Map d = new HashMap<>(); - private int[] inorder; private int[] postorder; public TreeNode buildTree(int[] inorder, int[] postorder) { - this.inorder = inorder; this.postorder = postorder; int n = inorder.length; for (int i = 0; i < n; ++i) {