diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..73f69e0958611ac6e00bde95641f6699030ad235 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..d4b854b8d4fa7be1ca526617ed1590623b835f8c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d98e885cd51e1ea254877f84e750548e5c8fae2 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BinaryTree.java b/BinaryTree.java new file mode 100644 index 0000000000000000000000000000000000000000..e2f2b56ec2b3c480ea8b6ac77fb6ddd3dbdb09b3 --- /dev/null +++ b/BinaryTree.java @@ -0,0 +1,206 @@ +// 写层序遍历用 +import java.util.LinkedList; +public class BinaryTree> { + public Node root; + BinaryTree(){ + root = null; + } + + /**插入元素*/ + public void insert(T val) + { + insert(val, this.root); + } + /**在某个位置开始判断插入元素 + * @return*/ + public Node insert(T t, Node node) { + if (node == null) { + //新构造一个二叉查找树 + return new Node(t); + } + int result = t.compareTo(node.value); + if (result < 0) + node.left=insert(t,node.left); + else if (result > 0) + node.right=insert(t, node.right); + else + ;//doNothing + return node; + } + + /**删除元素*/ + public void remove(T t) + { + root = remove(t,root); + } /**在某个位置开始判断删除某个结点*/ + public Node remove(T t,Node node) { + if (node == null) + return node;//没有找到,doNothing + int result = t.compareTo(node.value); + if (result > 0) + node.right = remove(t, node.right); + else if (result < 0) + node.left = remove(t, node.left); + else if (node.left != null && node.right != null) { + node.value = findMin(node.right); + node.right = remove(node.value, node.right); + } else + node = (node.left != null) ? node.left : node.right; + return node; + } + + /**找到二叉查找树中的最小值 + * @param value*/ + public T findMin(Object value) { + if (isEmpty()) { + System.out.println("二叉树为空"); + return null; + } else + return (root).value; + + } + + public boolean isEmpty() { + return root == null; + } + +//查找 + public boolean contains(T val){ + + return contains(val,root); + } + + //查找循环版 + public boolean contains(T t,Node tree){ + + while (tree!=null){ + int result = t.compareTo((T) tree.value); + if (result==0){ + return true; + }else if(result<0){ + tree=tree.left; + }else { + tree=tree.right; + } + } + return false; + + } + //查询递归版 +// public boolean contains(T t,Node tree){ +// int result = t.compareTo((T) tree.value); +// if (tree==null){ +// return false; +// }else if (result==0){ +// return true; +// }else if (result<0){ +// return (contains(t,tree.left)); +// +// }else return (contains(t,tree.right)); +// +// } + + /* + * 10 + * 5 15 + * 3 7 12 20 + * preOrder: 10 5 3 7 15 12 20 + */ + public void preOrder(){ + preOrderTraversal(root); + } + + private void preOrderTraversal(Node tree){ + if(tree != null) { + // root.value // 10 打印自身 + System.out.print(tree.value); + System.out.print(" "); + + // 打印10左子树 + preOrderTraversal(tree.left); + // root.left.value // 5 + // root.left.left.value // 3 + // root.left.right.value // 7 + + // 打印右子树 + preOrderTraversal(tree.right); + // root.right.value // 15 + // root.right.left.value // 12 + // root.right.right.value // 20 + } + } + public void inOrder(){ + inOrderTraversal(root); + } + + public void inOrderTraversal(Node tree){ + if(tree != null) { + + + // 打印10左子树 + inOrderTraversal(tree.left); + // root.left.value // 5 + // root.left.left.value // 3 + // root.left.right.value // 7 + // root.value // 10 打印自身 + System.out.print(tree.value); + System.out.print(" "); + // 打印右子树 + inOrderTraversal(tree.right); + // root.right.value // 15 + // root.right.left.value // 12 + // root.right.right.value // 20 + } + } + public void postOrder(){ + postOrderTraversal(root); + } + public void postOrderTraversal(Node tree){ + if(tree != null) { + + + // 打印10左子树 + postOrderTraversal(tree.left); + // root.left.value // 5 + // root.left.left.value // 3 + // root.left.right.value // 7 + + // 打印右子树 + postOrderTraversal(tree.right); + // root.right.value // 15 + // root.right.left.value // 12 + // root.right.right.value // 20 + + // root.value // 10 打印自身 + System.out.print(tree.value); + System.out.print(" "); + } + } + public void level(){ + levelOrderTraversal(root); + } + public void levelOrderTraversal(Node tree){ + if (tree==null){ + return; + } + LinkedList list=new LinkedList(); + list.add(tree); + Node temp; + while(!list.isEmpty()) { + temp = list.poll(); + System.out.print(temp.value); + System.out.print(" "); + if (temp.left != null) { + list.add(temp.left); + } + if (temp.right != null) { + list.add(temp.right); + + } + } + } + + + + +} \ No newline at end of file diff --git a/Main.java b/Main.java new file mode 100644 index 0000000000000000000000000000000000000000..ed6150525f8f0936c61487965b542a0a2ad35535 --- /dev/null +++ b/Main.java @@ -0,0 +1,55 @@ +class Main { + public static void main(String[] args){ + // 构造了一个空树 + BinaryTree bt = new BinaryTree(); + /* + * 10 + * 5 15 + * 3 7 12 20 + * preOrder: 10 5 3 7 15 12 20 + */ + bt.root = new Node<>(10); + Node left1 = new Node(5); + bt.root.left = left1; + Node right1 = new Node(15); + bt.root.right = right1; + + Node left21 = new Node(3); + left1.left = left21; + Node left22 = new Node(7); + left1.right = left22; + + Node left23 = new Node(12); + Node left24 = new Node(20); + right1.left = left23; + right1.right = left24; + + bt.preOrder(); + System.out.println(); + bt.inOrder(); + System.out.println(); + bt.postOrder(); + System.out.println(); + bt.level(); + System.out.println(); + if (bt.contains(20)){ + System.out.println("存在"); + }else { + System.out.println("不存在"); + } + bt.level(); + System.out.println(); + //树的插入 + bt.insert(8); + bt.insert(19); + bt.insert(21); + System.out.println(); + bt.preOrder(); + System.out.println(); + System.out.println("-----------------"); + //删除元素 + bt.remove(3); + System.out.println(); + bt.preOrder(); + } +} \ No newline at end of file diff --git a/Node.java b/Node.java new file mode 100644 index 0000000000000000000000000000000000000000..901b1a2bd6c06a19d4888918e969e7a03a5ff713 --- /dev/null +++ b/Node.java @@ -0,0 +1,12 @@ +public class Node { + public T value; + public Node left; + public Node right; + + Node(T val){ + value = val; + left = null; + right = null; + } + +} \ No newline at end of file diff --git a/lec05-tree.iml b/lec05-tree.iml new file mode 100644 index 0000000000000000000000000000000000000000..b107a2dd81165eaaf682ad3da030668b937fbb6c --- /dev/null +++ b/lec05-tree.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/lec05-tree/.gitignore b/out/production/lec05-tree/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..be4e21604f0029f5107fa5b6efaf8f36f0518239 --- /dev/null +++ b/out/production/lec05-tree/.gitignore @@ -0,0 +1,7 @@ +gen-branch.js +.DS_Store +package.json +package-lock.json +node_modules +id.txt +run.sh diff --git a/out/production/lec05-tree/.idea/.gitignore b/out/production/lec05-tree/.idea/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..73f69e0958611ac6e00bde95641f6699030ad235 --- /dev/null +++ b/out/production/lec05-tree/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml +# Editor-based HTTP Client requests +/httpRequests/ diff --git a/out/production/lec05-tree/.idea/misc.xml b/out/production/lec05-tree/.idea/misc.xml new file mode 100644 index 0000000000000000000000000000000000000000..d4b854b8d4fa7be1ca526617ed1590623b835f8c --- /dev/null +++ b/out/production/lec05-tree/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/out/production/lec05-tree/.idea/modules.xml b/out/production/lec05-tree/.idea/modules.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d98e885cd51e1ea254877f84e750548e5c8fae2 --- /dev/null +++ b/out/production/lec05-tree/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/out/production/lec05-tree/.idea/vcs.xml b/out/production/lec05-tree/.idea/vcs.xml new file mode 100644 index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53 --- /dev/null +++ b/out/production/lec05-tree/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/out/production/lec05-tree/BinaryTree.class b/out/production/lec05-tree/BinaryTree.class new file mode 100644 index 0000000000000000000000000000000000000000..b7c59c2bc62c608c0504db20c08e8183852e8a38 Binary files /dev/null and b/out/production/lec05-tree/BinaryTree.class differ diff --git a/out/production/lec05-tree/Main.class b/out/production/lec05-tree/Main.class new file mode 100644 index 0000000000000000000000000000000000000000..7cc5b4efb27aa0736a18953c5aaddc8269c6b611 Binary files /dev/null and b/out/production/lec05-tree/Main.class differ diff --git a/out/production/lec05-tree/Node.class b/out/production/lec05-tree/Node.class new file mode 100644 index 0000000000000000000000000000000000000000..8833b71af0a3dc049075cabf75556a5d08293f25 Binary files /dev/null and b/out/production/lec05-tree/Node.class differ diff --git a/out/production/lec05-tree/README.md b/out/production/lec05-tree/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8ec588d3be33fdf893da1c32f38e382e09de7d7b --- /dev/null +++ b/out/production/lec05-tree/README.md @@ -0,0 +1,32 @@ +# 树实验 + +### 作业要求 + +1. 必做任务:基础部分 +2. 选做任务:进阶部分,做多少是多少 + +### 截止日期 + +下次实验课上课前(11.25) + +### 基础 + +1. 实现⼀个⼆叉查找树,并且支持插⼊、删除、查找操作 +2. 实现⼆叉树前、中、后序以及按层遍历 + +### 进阶 + +1. 设计一个算法,找出二叉搜索树中指定节点的“下一个”/"前一个"节点(也即中序后继/前驱)。 + +## 工作流程 + +1. Fork 本仓库 +2. Clone 代码到本地 +3. 切换到自己学号对应的分支 +4. 完成作业 +5. 提交代码 +6. 新建 Pull Request + +## Questions + +1. 如何提交?lec02-linkedlist 项目中的参考作业提交流程.pdf 文件 diff --git a/out/production/lec05-tree/lec05-tree.iml b/out/production/lec05-tree/lec05-tree.iml new file mode 100644 index 0000000000000000000000000000000000000000..b107a2dd81165eaaf682ad3da030668b937fbb6c --- /dev/null +++ b/out/production/lec05-tree/lec05-tree.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git "a/out/production/lec05-tree/\350\257\276\344\273\266/lecture05-tree.pdf" "b/out/production/lec05-tree/\350\257\276\344\273\266/lecture05-tree.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..a6582225061dfd84f0fcb61a5c1a34da80f33820 Binary files /dev/null and "b/out/production/lec05-tree/\350\257\276\344\273\266/lecture05-tree.pdf" differ