diff --git a/src/main/java/com/cool/hot100/binary_tree/Num105.java b/src/main/java/com/cool/hot100/binary_tree/Num105.java new file mode 100644 index 0000000..59f8868 --- /dev/null +++ b/src/main/java/com/cool/hot100/binary_tree/Num105.java @@ -0,0 +1,57 @@ +package com.cool.hot100.binary_tree; + +import org.junit.Test; + +import java.util.HashMap; +import java.util.Map; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/09/01/19:34 + * DayNumber 2 + * Hard 2 + * Level 5 + */ +public class Num105 { + + Map map = new HashMap<>(); + + public TreeNode buildTree(int[] preorder, int[] inorder) { + for (int i = 0; i < inorder.length; i++) { + map.put(inorder[i], i); + } + return buildTree(preorder, 0, 0, inorder.length - 1); + } + + public TreeNode buildTree(int[] preorder, int indexInPre, int startInIn, int endInIn) { + if (startInIn > endInIn) return null; + TreeNode node = new TreeNode(preorder[indexInPre]); + Integer headInIn = map.get(preorder[indexInPre]); + int leftLength = headInIn - startInIn; + int rightLength = endInIn - headInIn; + node.left = buildTree(preorder,indexInPre+1,startInIn,headInIn-1); + node.right=buildTree(preorder,indexInPre+leftLength+1,headInIn+1,endInIn); + return node; + } + + @Test + public void test() { +// TreeNode node1 = new TreeNode(6); +// TreeNode node2 = new TreeNode(2); +// TreeNode node3 = new TreeNode(4); +// TreeNode node4 = new TreeNode(3); +// TreeNode node5 = new TreeNode(5); +// TreeNode node6 = new TreeNode(2); +// TreeNode node7 = new TreeNode(1); +// node7.left = node6; +// node7.right = node5; +// node6.left = node4; +// node6.right = node3; +// node5.right = node1; + buildTree(new int[]{3, 9, 20, 15, 7}, new int[]{9, 3, 15, 20, 7}); + } +} + + diff --git a/src/main/java/com/cool/hot100/binary_tree/Num114.java b/src/main/java/com/cool/hot100/binary_tree/Num114.java new file mode 100644 index 0000000..6b62128 --- /dev/null +++ b/src/main/java/com/cool/hot100/binary_tree/Num114.java @@ -0,0 +1,69 @@ +package com.cool.hot100.binary_tree; + +import org.junit.Test; + +/** + * Created with IntelliJ IDEA. + * + * @Author: Cool + * @Date: 2024/09/01/17:17 + * DayNumber 1 + * Hard 2 + * Level 3 + */ +public class Num114 { + public void flatten(TreeNode root) { +// while (root != null) { +// TreeNode right = root.right; +// if (root.left != null) { +// TreeNode left = root.left; +// while (left.right != null) { +// left = left.right; +// } +// root.right = root.left; +// left.right = right; +// } +// root.left = null; +// root = root.right; +// } + dfs(root); + } + + private TreeNode dfs(TreeNode root) { + if (root == null) return null; + TreeNode returnRoot = root; + TreeNode right = dfs(root.right); + TreeNode left = dfs(root.left); + root.left = null; + if (left != null) { + root.right = left; + } + if (left != null && right != null) { + while (root.right!=null){ + root=root.right; + } + root.right = right; + } else if (right != null) { + root.right = right; + } + return returnRoot; + } + + @Test + public void test() { + TreeNode node1 = new TreeNode(6); + TreeNode node2 = new TreeNode(2); + TreeNode node3 = new TreeNode(4); + TreeNode node4 = new TreeNode(3); + TreeNode node5 = new TreeNode(5); + TreeNode node6 = new TreeNode(2); + TreeNode node7 = new TreeNode(1); + node7.left = node6; + node7.right = node5; + node6.left = node4; + node6.right = node3; + node5.right = node1; + flatten(node7); + } + +} diff --git a/src/main/java/com/cool/hot100/binary_tree/Num199.java b/src/main/java/com/cool/hot100/binary_tree/Num199.java index 9a8b228..c80c803 100644 --- a/src/main/java/com/cool/hot100/binary_tree/Num199.java +++ b/src/main/java/com/cool/hot100/binary_tree/Num199.java @@ -1,6 +1,5 @@ package com.cool.hot100.binary_tree; -import sun.reflect.generics.tree.Tree; import java.util.ArrayList; import java.util.LinkedList;