From f469f18748d3153cf16d19fdace0bea0f08ec313 Mon Sep 17 00:00:00 2001 From: whai Date: Sun, 21 Jan 2024 22:05:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=8D=E4=B9=A0+=20=E4=B8=80=E4=BA=9B?= =?UTF-8?q?=E4=BA=8C=E5=8F=89=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 24 ++-- .../whaifree/leetCode/Tree/LeetCode101.java | 91 +++++++++++++++ .../whaifree/leetCode/Tree/LeetCode104.java | 99 ++++++++++++++++ .../whaifree/leetCode/Tree/LeetCode111.java | 107 ++++++++++++++++++ .../whaifree/leetCode/Tree/LeetCode559.java | 79 +++++++++++++ .../redo/redo_24_1_20/LeetCode199.java | 71 ++++++++++++ .../redo/redo_24_1_20/LeetCode94.java | 83 ++++++++++++++ .../LeetCode15.java | 2 +- .../LeetCode151.java | 2 +- .../LeetCode18.java | 2 +- .../LeetCode202.java | 2 +- .../LeetCode203_false.java | 2 +- .../LeetCode206_false.java | 2 +- .../LeetCode209_false.java | 2 +- .../LeetCode2487_false.java | 2 +- .../LeetCode287_false.java | 6 +- .../LeetCode28_false.java | 2 +- 17 files changed, 552 insertions(+), 26 deletions(-) create mode 100644 src/main/java/cn/whaifree/leetCode/Tree/LeetCode101.java create mode 100644 src/main/java/cn/whaifree/leetCode/Tree/LeetCode104.java create mode 100644 src/main/java/cn/whaifree/leetCode/Tree/LeetCode111.java create mode 100644 src/main/java/cn/whaifree/leetCode/Tree/LeetCode559.java create mode 100644 src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode199.java create mode 100644 src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode94.java rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode15.java (97%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode151.java (98%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode18.java (98%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode202.java (95%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode203_false.java (96%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode206_false.java (95%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode209_false.java (95%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode2487_false.java (97%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode287_false.java (89%) rename src/main/java/cn/whaifree/redo/{redo24_1_7 => redo_24_1_7}/LeetCode28_false.java (94%) diff --git a/pom.xml b/pom.xml index 78cce23..edaae99 100644 --- a/pom.xml +++ b/pom.xml @@ -14,21 +14,21 @@ - + - - cn.hutool - hutool-http - 5.8.18 - + + cn.hutool + hutool-http + 5.8.18 + - - junit - junit - 4.12 - - + + junit + junit + 4.12 + + diff --git a/src/main/java/cn/whaifree/leetCode/Tree/LeetCode101.java b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode101.java new file mode 100644 index 0000000..47c3b53 --- /dev/null +++ b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode101.java @@ -0,0 +1,91 @@ +package cn.whaifree.leetCode.Tree; + +import cn.whaifree.leetCode.model.TreeNode; +import org.junit.Test; + +import java.util.Deque; +import java.util.LinkedList; + +/** + * @version 1.0 + * @Author whai文海104 + * @Date 2024/1/21 19:19 + * @注释 + */ +public class LeetCode101 { + + @Test + public void test() { + TreeNode treeNode = TreeNode.constructTree(new Integer[]{1, 2, 2, 3, null,null, 3}); + treeNode.printTree(); + System.out.println(new Solution1().isSymmetric(treeNode)); + + } + + class Solution { + public boolean isSymmetric(TreeNode root) { + if (root == null) { + return true; + } + return compare(root.left, root.right); + } + + public boolean compare(TreeNode left, TreeNode right) { + // left.left 与 right.right递归 + // left.right 与 right.left递归 + if (left == null && right == null) { + return true; + } else if (left != null && right == null) { + return false; + } else if (left == null && right != null) { + return false; + } else if (left.val != right.val) { + return false; + } + + boolean outSite = compare(left.left, right.right); + boolean inSite = compare(left.right, right.left); + return outSite && inSite; + } + } + + class Solution1 { + public boolean isSymmetric(TreeNode root) { + if (root == null) { + return true; + } + + Deque deque = new LinkedList<>(); + deque.add(root.left); + deque.add(root.right); + while (!deque.isEmpty()) { + TreeNode left = deque.pop(); + TreeNode right = deque.pop(); + if (left == null && right == null) { + continue; + } +// else if (left == null && right != null) { +// return false; +// } else if (left != null && right == null) { +// return false; +// } else if (left.val != right.val) { +// return false; +// } + if (left == null || right == null || left.val != right.val) { + return false; + } + + deque.add(left.left); + deque.add(right.right); + deque.add(left.right); + deque.add(right.left); + + } + return true; + } + + + + } + +} diff --git a/src/main/java/cn/whaifree/leetCode/Tree/LeetCode104.java b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode104.java new file mode 100644 index 0000000..e29b14e --- /dev/null +++ b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode104.java @@ -0,0 +1,99 @@ +package cn.whaifree.leetCode.Tree; + +import cn.whaifree.leetCode.model.TreeNode; +import org.junit.Test; + +import java.util.ArrayDeque; +import java.util.Deque; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/1/21 20:05 + * @注释 + */ +public class LeetCode104 { + + @Test + public void test() { + TreeNode treeNode = TreeNode.constructTree(new Integer[]{1, 2, 2, 3, null,null,null}); + treeNode.printTree(); + System.out.println(new Solution2().maxDepth(treeNode)); + } + + class Solution { + + int depth = 0; + public int maxDepth(TreeNode root) { + if (root == null) { + return 0; + } + level(root, 1); + return depth; + } + + public void level(TreeNode treeNode, int level) { + if (treeNode == null) { + return; + } + if (level > depth) { + depth = level; + } + if (treeNode.right != null) { + level(treeNode.right, level + 1); + } + if (treeNode.left != null) { + level(treeNode.left, level + 1); + } + + } + } + + class Solution2{ + + public int maxDepth(TreeNode root) { + if (root == null) { + return 0; + } + return level(root); + } + + public int level(TreeNode treeNode) { + if (treeNode == null) { + return 0; + } + int left = level(treeNode.left) + 1; + int right = level(treeNode.right) + 1; + return Math.max(left, right); + } + } + + class Solution1 { + + + public int maxDepth(TreeNode root) { + if (root == null) { + return 0; + } + int depth = 0; + // 右视图 + Deque deque = new ArrayDeque<>(); + deque.add(root); + while (!deque.isEmpty()) { + int size = deque.size(); + for (int i = 0; i < size; i++) { + TreeNode pop = deque.pop(); + if (pop.left != null) { + deque.add(pop.left); + } + if (pop.right != null) { + deque.add(pop.right); + } + } + depth++; + } + return depth; + } + + } +} diff --git a/src/main/java/cn/whaifree/leetCode/Tree/LeetCode111.java b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode111.java new file mode 100644 index 0000000..aa927ef --- /dev/null +++ b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode111.java @@ -0,0 +1,107 @@ +package cn.whaifree.leetCode.Tree; + +import cn.whaifree.leetCode.model.TreeNode; +import org.junit.Test; + +import java.util.ArrayDeque; +import java.util.Deque; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/1/21 20:36 + * @注释 + */ +public class LeetCode111 { + + @Test + public void test() { + TreeNode treeNode = TreeNode.constructTree(new Integer[]{1, 2, 2, 3, null,null,null,3}); + treeNode.printTree(); + System.out.println(new Solution2().minDepth(treeNode)); + } + + class Solution { + int minDepth = Integer.MAX_VALUE; + public int minDepth(TreeNode root) { + if (root == null) { + return 0; + } + getDepth(root, 1); + return minDepth; + } + + void getDepth(TreeNode root, int level) { + if (root == null) { + return; + } + if (root.left != null) { + getDepth(root.left, level + 1); + } + if (root.right != null) { + getDepth(root.right, level + 1); + } + // 左右子树都为空,才表明已经到底部了 + if (root.left == null && root.right == null && level < minDepth) { + minDepth = level; + } + } + } + + class Solution1 { + public int minDepth(TreeNode root) { + return getDepth(root); + } + + int getDepth(TreeNode root) { + if (root == null) { + return 0; + } + int right = getDepth(root.right) ; + int left = getDepth(root.left) ; + if (root.left == null && root.right != null) { + return right + 1; + } + if (root.right == null && root.left != null) { + return left + 1; + } + + return 1 + Math.min(right, left); + } + } + + + class Solution2 { + public int minDepth(TreeNode root) { + if (root == null) { + return 0; + } + + int depth = 0; + + // 右视图 + Deque deque = new ArrayDeque<>(); + deque.add(root); + while (!deque.isEmpty()) { + int size = deque.size(); + depth++; + for (int i = 0; i < size; i++) { + TreeNode pop = deque.pop(); + if (pop.left != null) { + deque.add(pop.left); + } + if (pop.right != null) { + deque.add(pop.right); + } + if (pop.right == null && pop.left == null) { + // 从上到下第一个双节点非空就是输出 + return depth; + } + } + + } + return 0; + } + + } +} diff --git a/src/main/java/cn/whaifree/leetCode/Tree/LeetCode559.java b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode559.java new file mode 100644 index 0000000..05a517c --- /dev/null +++ b/src/main/java/cn/whaifree/leetCode/Tree/LeetCode559.java @@ -0,0 +1,79 @@ +package cn.whaifree.leetCode.Tree; + +import cn.whaifree.leetCode.model.Node; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/1/21 20:20 + * @注释 + */ +public class LeetCode559 { + + @Test + public void test() { + Node node = new Node(1); + node.children = new LinkedList<>(); + node.children.add(new Node(2)); + node.children.add(new Node(3)); + node.children.add(new Node(4)); + node.children.get(2).children = new ArrayList<>(); + node.children.get(2).children.add(new Node(6)); + node.children.get(2).children.add(new Node(7)); + + System.out.println(new Solution1().maxDepth(node)); + } + + class Solution { + public int maxDepth(Node root) { + return getDepth(root); + } + + public int getDepth(Node root) { + if (root == null) { + return 0; + } + int max = 1; + + List children = root.children; + if (children != null) { + for (Node child : children) { + max = Math.max(getDepth(child) + 1, max); + } + } + return max; + } + } + + class Solution1 { + int max = 0; + public int maxDepth(Node root) { + if (root == null) { + return 0; + } + getDepth(root, 1); + return max; + } + + public void getDepth(Node root,int level) { + if (root == null) { + return; + } + if (level > max) { + max = level; + } + List children = root.children; + if (children != null) { + for (Node child : children) { + getDepth(child, level + 1); + } + } + } + } + +} diff --git a/src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode199.java b/src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode199.java new file mode 100644 index 0000000..e4b51ca --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode199.java @@ -0,0 +1,71 @@ +package cn.whaifree.redo.redo_24_1_20; + +import cn.whaifree.leetCode.model.TreeNode; +import org.junit.Test; + +import java.util.*; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/1/20 19:01 + * @注释 + */ +public class LeetCode199 { + @Test + public void test() { + TreeNode root = TreeNode.constructTree(new Integer[]{1, 2, 3, null, 5, null, 4}); + root.printTree(); + List integers = new Solution1().rightSideView(root); + System.out.println(integers); + } + + class Solution { + public List rightSideView(TreeNode root) { + + List res = new ArrayList<>(); + if (root == null) { + return res; + } + + Deque queue = new ArrayDeque<>(); + queue.add(root); + while (!queue.isEmpty()) { + int size = queue.size(); + for (int i = 0; i < size; i++) { + TreeNode pop = queue.pop(); + if (i == size - 1) { + res.add(pop.val); + } + if (pop.left!=null) queue.add(pop.left); + if (pop.right!=null) queue.add(pop.right); + } + } + return res; + + } + } + + class Solution1 { + + List res = new LinkedList(); + + public List rightSideView(TreeNode root) { + level(root, 0); + return res; + } + + void level(TreeNode root,int level) { + if (root == null) { + return; + } + + if (level == res.size()) { + res.add(root.val); + } + if (root.right != null) level(root.right, level + 1); + if (root.left != null) level(root.left, level + 1); + + } + } +} diff --git a/src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode94.java b/src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode94.java new file mode 100644 index 0000000..1c77e6a --- /dev/null +++ b/src/main/java/cn/whaifree/redo/redo_24_1_20/LeetCode94.java @@ -0,0 +1,83 @@ +package cn.whaifree.redo.redo_24_1_20; + +import cn.whaifree.leetCode.LinkedList.LeetCode142; +import cn.whaifree.leetCode.model.TreeNode; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Deque; +import java.util.LinkedList; +import java.util.List; + +/** + * @version 1.0 + * @Author whai文海 + * @Date 2024/1/20 18:37 + * @注释 + */ +public class LeetCode94 { + + @Test + public void test() { + TreeNode root = TreeNode.constructTree(new Integer[]{1, 2, 3, 4}); + root.printTree(); + System.out.println(new Solution().inorderTraversal(root)); + } + + class Solution{ + public List inorderTraversal(TreeNode root) { + + List res = new LinkedList<>(); + if (root == null) { + return res; + } + + Deque stack = new LinkedList<>(); + stack.push(root); + while (!stack.isEmpty()) { + + TreeNode pop = stack.pop(); + if (pop != null) { + // 中序 +// stack.push(pop); +// stack.push(null); +// if (pop.left != null) { +// stack.push(pop.left); +// } +// if (pop.right != null) { +// stack.push(pop.right); +// } + + // 后序 再Reverse + if (pop.left != null) { + stack.push(pop.left); + } + if (pop.right != null) { + stack.push(pop.right); + } + stack.push(pop); + stack.push(null); + // 前序 +// if (pop.right != null) { +// stack.push(pop.right); +// } +// if (pop.left != null) { +// stack.push(pop.left); +// } +// stack.push(pop); +// stack.push(null); + + } else { + // 前序 中序 +// res.add(stack.pop().val); + // 后序 + res.add(0,stack.pop().val); + } + + } + return res; + + } + + } +} diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode15.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode15.java similarity index 97% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode15.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode15.java index 819a35e..db60d2a 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode15.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode15.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import org.junit.Test; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode151.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode151.java similarity index 98% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode151.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode151.java index 9b7f444..718c66e 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode151.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode151.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import org.junit.Test; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode18.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode18.java similarity index 98% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode18.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode18.java index 88932d3..f259c33 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode18.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode18.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import org.junit.Test; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode202.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode202.java similarity index 95% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode202.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode202.java index 335742a..c128ee6 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode202.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode202.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import org.junit.Test; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode203_false.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode203_false.java similarity index 96% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode203_false.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode203_false.java index cd13648..a192cd1 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode203_false.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode203_false.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import cn.whaifree.leetCode.model.ListNode; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode206_false.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode206_false.java similarity index 95% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode206_false.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode206_false.java index c41bc00..8e7140c 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode206_false.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode206_false.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import cn.whaifree.leetCode.model.ListNode; import org.junit.Test; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode209_false.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode209_false.java similarity index 95% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode209_false.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode209_false.java index 8bd8503..c64cf5a 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode209_false.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode209_false.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import org.junit.Test; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode2487_false.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode2487_false.java similarity index 97% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode2487_false.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode2487_false.java index fec578f..58fb5ec 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode2487_false.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode2487_false.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import cn.whaifree.leetCode.model.ListNode; import org.junit.Test; diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode287_false.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode287_false.java similarity index 89% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode287_false.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode287_false.java index 1562743..5825718 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode287_false.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode287_false.java @@ -1,11 +1,7 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; -import cn.hutool.core.lang.hash.Hash; import org.junit.Test; -import java.util.HashSet; -import java.util.Set; - public class LeetCode287_false { @Test diff --git a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode28_false.java b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode28_false.java similarity index 94% rename from src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode28_false.java rename to src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode28_false.java index 9848359..3c7acd8 100644 --- a/src/main/java/cn/whaifree/redo/redo24_1_7/LeetCode28_false.java +++ b/src/main/java/cn/whaifree/redo/redo_24_1_7/LeetCode28_false.java @@ -1,4 +1,4 @@ -package cn.whaifree.redo.redo24_1_7; +package cn.whaifree.redo.redo_24_1_7; import org.junit.Test;