From b5b56f06c0faa6e95925b8e63108be882e955b2f Mon Sep 17 00:00:00 2001 From: zan Date: Wed, 18 Nov 2020 08:32:26 +0800 Subject: [PATCH 1/2] =?UTF-8?q?[add]=20=E5=85=88=E5=BA=8F=E9=81=8D?= =?UTF-8?q?=E5=8E=86=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BinaryTree.java | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ Main.java | 29 +++++++++++++++++++++++++++++ Node.java | 11 +++++++++++ 3 files changed, 88 insertions(+) create mode 100644 BinaryTree.java create mode 100644 Main.java create mode 100644 Node.java diff --git a/BinaryTree.java b/BinaryTree.java new file mode 100644 index 0000000..44fcb01 --- /dev/null +++ b/BinaryTree.java @@ -0,0 +1,48 @@ +// 写层序遍历用 +import java.util.Queue; +import java.util.LinkedList; + +public class BinaryTree { + public Node root; + + BinaryTree(){ + root = null; + } + + void insert(T val){} + + /* + * 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(root.left) + // root.left.value // 5 + // root.left.left.value // 3 + // root.left.right.value // 7 + + // 打印右子树 + preOrderTraversal(root.right) + // root.right.value // 15 + // root.right.left.value // 12 + // root.right.right.value // 20 + } + } + + + public void inOrder(){} + public void postOrder(){} + public void level(){} +} \ No newline at end of file diff --git a/Main.java b/Main.java new file mode 100644 index 0000000..d394f77 --- /dev/null +++ b/Main.java @@ -0,0 +1,29 @@ +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(); + } +} \ No newline at end of file diff --git a/Node.java b/Node.java new file mode 100644 index 0000000..d845786 --- /dev/null +++ b/Node.java @@ -0,0 +1,11 @@ +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 -- Gitee From dccf9fae084ae80c894826c73fb17884037955bd Mon Sep 17 00:00:00 2001 From: XIE <18950888253@qq.com> Date: Tue, 24 Nov 2020 23:03:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 8 +++ .idea/misc.xml | 6 ++ .idea/modules.xml | 8 +++ .idea/vcs.xml | 6 ++ BinaryTree.java | 160 ++++++++++++++++++++++++++++++++++++---------- Main.java | 54 +++++++++------- lec05-tree.iml | 11 ++++ 7 files changed, 199 insertions(+), 54 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/vcs.xml create mode 100644 lec05-tree.iml diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..2b30c91 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Datasource local storage ignored files +/../../../../:\IdeaProjects\lec05-tree\.idea/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 0000000..e208459 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..9d98e88 --- /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 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BinaryTree.java b/BinaryTree.java index 44fcb01..4d7091c 100644 --- a/BinaryTree.java +++ b/BinaryTree.java @@ -1,48 +1,144 @@ // 写层序遍历用 -import java.util.Queue; -import java.util.LinkedList; -public class BinaryTree { - public Node root; +import java.time.Instant; + import java.util.Queue; + import java.util.LinkedList; - BinaryTree(){ +public class BinaryTree { + public Node root; + + BinaryTree() { root = null; } - void insert(T val){} + //插入 + public void insert(String val) { + Node newNode = new Node<>(val); + if (root == null) { + root = newNode; + return; + } + Node markNode = root; + Node underNode; + while (true) { + underNode = markNode; + if (Integer.valueOf(newNode.value) > Integer.valueOf(markNode.value)) { + //进入右节点 + markNode = markNode.right; + if (markNode == null) { + underNode.right = newNode; + return; + } + } else { + //进入左节点 + markNode = markNode.left; + if (markNode == null) { + underNode.left = newNode; + return; + } + } + } + } - /* - * 10 - * 5 15 - * 3 7 12 20 - * preOrder: 10 5 3 7 15 12 20 - */ - public void preOrder(){ - preOrderTraversal(root); + //查找 + public boolean select(String val) { + if (root == null) { + return false; + } + Node markNode = root; + while (true) { + if (markNode.value.equals(val)) { + return true; + } + if (Integer.valueOf(val) > Integer.valueOf(markNode.value)) { + //进入右节点 + markNode = markNode.right; + } else { + //进入左节点 + markNode = markNode.left; + } + if (markNode == null) { + return false; + } + } } +// +// //删除 +// public boolean del(String val) { +// +// +// +// +// } - private void preOrderTraversal(Node tree){ - if(tree != null) { - // root.value // 10 打印自身 - System.out.print(tree.value); - System.out.print(" "); + public void preOrder() { + preOrderTraversal(root); + } + + //根左右 + private void preOrderTraversal(Node tree) { + if (tree != null) { + // 打印自身 + System.out.print(tree.value + " "); // 打印10左子树 - preOrderTraversal(root.left) - // root.left.value // 5 - // root.left.left.value // 3 - // root.left.right.value // 7 - + preOrderTraversal(tree.left); + // 打印右子树 + preOrderTraversal(tree.right); + } + } + + public void inOrder() { + inOrderTraversal(root); + } + + // 左根右 + private void inOrderTraversal(Node tree) { + if (tree != null) { + // 打印左子树 + inOrderTraversal(tree.left); + // 打印自身 + System.out.print(tree.value + " "); + // 打印右子树 + inOrderTraversal(tree.right); + } + } + + public void postOrder() { + postOrderTraversal(root); + } + + //左右根 + private void postOrderTraversal(Node tree) { + if (tree != null) { + // 打印左子树 + postOrderTraversal(tree.left); // 打印右子树 - preOrderTraversal(root.right) - // root.right.value // 15 - // root.right.left.value // 12 - // root.right.right.value // 20 + postOrderTraversal(tree.right); + // 打印自身 + System.out.print(tree.value + " "); } } + public void level() { + if (root == null) { + return; + } + Queue queue = new LinkedList<>(); + queue.add(root); + while (!queue.isEmpty()) { + Node item = queue.remove(); + System.out.print(item.value + " "); + if (item.left != null) { + queue.add(item.left); + } + if (item.right != null) { + queue.add(item.right); + } + } + } +} + + + - public void inOrder(){} - public void postOrder(){} - public void level(){} -} \ No newline at end of file diff --git a/Main.java b/Main.java index d394f77..d8276dc 100644 --- a/Main.java +++ b/Main.java @@ -1,29 +1,39 @@ 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; + BinaryTree bt = new BinaryTree(); + /* + * 10 + * 5 15 + * 3 7 12 20 + * preOrder: 10 5 3 7 15 12 20 + */ + bt.insert("10"); + bt.insert("5"); + bt.insert("15"); + bt.insert("3"); + bt.insert("7"); + bt.insert("12"); + bt.insert("20"); + bt.preOrder(); + System.out.println(); + bt.inOrder(); + System.out.println(); + bt.postOrder(); + System.out.println(); + bt.level(); + System.out.println(); + System.out.println("5是否存在"+bt.select("10")); + System.out.println("15是否存在"+bt.select("20")); + System.out.println("25是否存在"+bt.select("30")); + System.out.println("35是否存在"+bt.select("40")); + + + + + + } } \ No newline at end of file diff --git a/lec05-tree.iml b/lec05-tree.iml new file mode 100644 index 0000000..b107a2d --- /dev/null +++ b/lec05-tree.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file -- Gitee