From 0b15833faf745c96ed1ffd05005590831f16352b Mon Sep 17 00:00:00 2001 From: macvis_qq75939388 Date: Mon, 22 May 2017 14:11:57 +0800 Subject: [PATCH 1/4] file stage --- .../src/test/java/gabageCollection/MemoryLeakSimulation.java | 1 + 1 file changed, 1 insertion(+) diff --git a/group24/75939388/learning2017/src/test/java/gabageCollection/MemoryLeakSimulation.java b/group24/75939388/learning2017/src/test/java/gabageCollection/MemoryLeakSimulation.java index 483efec77d..4b1d1b9e13 100644 --- a/group24/75939388/learning2017/src/test/java/gabageCollection/MemoryLeakSimulation.java +++ b/group24/75939388/learning2017/src/test/java/gabageCollection/MemoryLeakSimulation.java @@ -17,6 +17,7 @@ public static void testOutOfMemory(){ } } + //死循环的递归会引起stackOverFlow public static void testStackOverFlowError(){ testStackOverFlowError(); } From a2dab54da48e2495fc2a306297683cd5b09ec2fe Mon Sep 17 00:00:00 2001 From: macvis Date: Tue, 23 May 2017 16:14:22 +0800 Subject: [PATCH 2/4] filestage --- .../binaryTree/BinarySearchTree.java | 30 +++++++++++++++++++ .../coding/basic/tree/BinarySearchTree.java | 2 +- 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java index acbb5c7083..df73f92bda 100644 --- a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java +++ b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java @@ -88,5 +88,35 @@ private void remove(BinaryTreeNode node, int value) { } } + /** + * 逐层遍历 + */ + public List levelVisit(){ + + return null; + } + + /** + * 判断一个二叉树是不是二叉查找树 + */ + public boolean isValid(){ + return false; + } + + /** + * 获取两个节点的最小公共祖先 + */ + public T getLowestCommonAncestor(T n1, T n2){ + return null; + + } + + /** + * 给定两个值, 获得处于这两个值中间的节点 + */ + public List getNodesBetween(T n1, T n2){ + return null; + } + } diff --git a/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java b/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java index f01cbe358b..5bc7d11016 100644 --- a/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java +++ b/liuxin/data-structure/assignment/src/com/coding/basic/tree/BinarySearchTree.java @@ -29,7 +29,7 @@ public int size() { public void remove(T e){ } - public List levelVisit(){ + public List c(){ return null; } From 53ee7f9372fe87cadbab98a11ba187d2cb5ed050 Mon Sep 17 00:00:00 2001 From: macvis Date: Wed, 24 May 2017 17:47:48 +0800 Subject: [PATCH 3/4] fileStage --- .../binaryTree/BinarySearchTree.java | 74 ++++++++++++++++++- .../tree/BinarySearchTreeTest.java | 20 +++++ 2 files changed, 90 insertions(+), 4 deletions(-) diff --git a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java index df73f92bda..92d2e1c993 100644 --- a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java +++ b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java @@ -1,6 +1,6 @@ package basic.dataStructure.binaryTree; -import java.util.List; +import java.util.*; public class BinarySearchTree { @@ -92,25 +92,91 @@ private void remove(BinaryTreeNode node, int value) { * 逐层遍历 */ public List levelVisit(){ + Queue buffer = new LinkedList(); + List result = new ArrayList(); - return null; + result = level(root, result, buffer); + + return result; + } + + private List level(BinaryTreeNode node, List result, Queue buffer){ + result.add(node.getData()); + if(node.getLeft() != null){ + buffer.offer(node.left); + } + + if(node.getRight() != null){ + buffer.offer(node.right); + } + + while(!buffer.isEmpty()){ + result = level(buffer.poll(), result, buffer); + } + + return result; } /** * 判断一个二叉树是不是二叉查找树 */ public boolean isValid(){ - return false; + if(root.left == null || root.right == null){ + return false; + } + + return root.left.getData().compareTo(root.getData()) == -1 && + root.right.getData().compareTo(root.getData()) == 1; } /** * 获取两个节点的最小公共祖先 */ public T getLowestCommonAncestor(T n1, T n2){ - return null; + if(!isValid()){ + throw new RuntimeException("this tree is not binary search tree"); + } + + return getLowestCommonAncestor(root, n1, n2).data; + } + + private BinaryTreeNode getLowestCommonAncestor(BinaryTreeNode node, T n1, T n2){ +// if(node == null || node.data.compareTo(n1) == 0 || node.data.compareTo(n2) == 0){ +// return node; +// } +// +// BinaryTreeNode left = getLowestCommonAncestor(node.left, n1, n2); +// BinaryTreeNode right = getLowestCommonAncestor(node.right, n1, n2); +// +// if (left != null && right != null) { +// return node; +// } +// if (left != null) { +// return left; +// } +// if (right != null) { +// return right; +// } +// return null; + if(node == null){ + return null; + } + int cmp1 = n1.compareTo(node.data); + int cmp2 = n2.compareTo(node.data); + + if(cmp1 > 0 && cmp2 > 0){ + return getLowestCommonAncestor(node.right, n1, n2); + } + + if(cmp1 < 0 && cmp2 < 0){ + return getLowestCommonAncestor(node.left, n1, n2); + } + + return node; } + /** * 给定两个值, 获得处于这两个值中间的节点 */ diff --git a/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java index 6dbef3a2bc..4eaa4351e0 100644 --- a/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java +++ b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java @@ -7,6 +7,7 @@ import org.junit.Before; import org.junit.Test; +import java.util.List; public class BinarySearchTreeTest { @@ -52,6 +53,7 @@ public void testRemoveLeaf() { Assert.assertEquals(3, root.left.right.data.intValue()); } + @Test public void testRemoveMiddleNode() { tree.remove(2); @@ -59,4 +61,22 @@ public void testRemoveMiddleNode() { Assert.assertEquals(3, root.left.data.intValue()); Assert.assertEquals(4, root.left.right.data.intValue()); } + + @Test + public void testLevelVisit(){ + List list = tree.levelVisit(); + Assert.assertEquals("[6, 2, 8, 1, 4, 3]", list.toString()); + } + + @Test + public void testGetLowestCommonAncestor(){ + int num = tree.getLowestCommonAncestor(3, 8); + Assert.assertEquals(6, num); + } + + @Test + public void testGetNodesBetween(){ + List list = tree.getNodesBetween(1, 8); + Assert.assertEquals("[2, 6]", list); + } } From fca8481cc9f38e5d0f1b431ff740e2ad8b5a8e17 Mon Sep 17 00:00:00 2001 From: macvis Date: Thu, 25 May 2017 15:31:05 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E7=AC=AC=E5=8D=81=E4=BA=8C=E5=91=A8?= =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../binaryTree/BinarySearchTree.java | 17 ++++++++++++++++- .../tree/BinarySearchTreeTest.java | 11 +++++++++-- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java index 92d2e1c993..cf0286e788 100644 --- a/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java +++ b/group24/75939388/learning2017/src/main/java/basic/dataStructure/binaryTree/BinarySearchTree.java @@ -181,8 +181,23 @@ private BinaryTreeNode getLowestCommonAncestor(BinaryTreeNode node, T n1, * 给定两个值, 获得处于这两个值中间的节点 */ public List getNodesBetween(T n1, T n2){ - return null; + if(!isValid()) throw new RuntimeException("this is not binary search tree"); + List list = new ArrayList(); + getNodesBetween(root, n1, n2, list); + return list; } + private void getNodesBetween(BinaryTreeNode node, T n1, T n2, List list){ + int cmp1 = n1.compareTo(node.data); + int cmp2 = n2.compareTo(node.data); + + if(cmp1 == -1 && node.left != null){ + if(cmp2 != 0) list.add(node.data); + getNodesBetween(node.left, n1, n2, list); + }else if(cmp2 == 1 && node.right != null){ + if(cmp1 != 0) list.add(node.data); + getNodesBetween(node.right, n1, n2, list); + } + } } diff --git a/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java index 4eaa4351e0..5825a9fc95 100644 --- a/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java +++ b/group24/75939388/learning2017/src/test/java/data_structure/tree/BinarySearchTreeTest.java @@ -76,7 +76,14 @@ public void testGetLowestCommonAncestor(){ @Test public void testGetNodesBetween(){ - List list = tree.getNodesBetween(1, 8); - Assert.assertEquals("[2, 6]", list); + { + List list = tree.getNodesBetween(3, 8); + Assert.assertEquals("[6, 2, 4]", list.toString()); + } + { + List list = tree.getNodesBetween(3, 6); + Assert.assertEquals("[2, 4]", list.toString()); + } + } }