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 0392820255e364a6f16818f8367deec1aae0e7e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B8=B8=E7=9A=93=E6=A5=A0?= <1026609323@qq.com> Date: Tue, 15 Dec 2020 22:24:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BD=9C=E4=B8=9A=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BinaryTree.java | 277 +++++++++++++++++++++++++++++++++++++++--------- Main.java | 29 ----- MainTest.java | 21 ++++ Node.java | 54 ++++++++-- 4 files changed, 294 insertions(+), 87 deletions(-) delete mode 100644 Main.java create mode 100644 MainTest.java diff --git a/BinaryTree.java b/BinaryTree.java index 44fcb01..e4f69c3 100644 --- a/BinaryTree.java +++ b/BinaryTree.java @@ -1,48 +1,229 @@ -// 写层序遍历用 -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 +public class BinaryTree { + private Node root; + + /** + * Ԫ + * @param data + */ + public void insertData(Integer data) { + Node node = new Node(data); + Node root = this.root; + if (root == null) { + this.root = node; + System.out.println("ӣ" + node); + return; + } + insertData(root,node); + } + + /** + * + */ + public void leftPrint() { + if (this.root == null) { + System.out.println("˶Ϊ"); + return; + } + System.out.print("ǰ"); + leftPrint(this.root); + System.out.println(" "); + } + + /** + * + */ + public void midPrint() { + if (this.root == null) { + System.out.println("˶Ϊ"); + return; + } + System.out.print(""); + midPrint(this.root); + System.out.println(" "); + } + + /** + * + */ + public void rightPrint() { + if (this.root == null) { + System.out.println("˶Ϊ"); + return; + } + System.out.print(""); + rightPrint(this.root); + System.out.println(" "); + } + + /** + * αûд + */ + public void levelPrint() { + System.out.println(this.root); + } + + /** + * + * @param data + */ + public void deleteData(Integer data) { + deleteData(this.root,data); + } + + /** + * ɾڵ㣬ҵĿֵĿֵĿֵСֵ棬СֵĿֵڵ + * @param root + * @param data + */ + private void deleteData(Node root,Integer data) { + if (root.getData().equals(data)) { + if (root.getRight()!=null) { + if (root.getRight().getLeft() == null && root.getRight().getRight() == null) { + root.setData(root.getRight().getData()); + root.setRight(null); + return; + }else if (root.getRight().getLeft() == null && root.getRight().getRight() != null){ + Integer temp = root.getRight().getData(); + System.out.println("ɾ" + temp); + root.setData(temp); + root.setRight(root.getRight().getRight()); + return; + }else { + Integer temp = getLeftEnd(root.getRight()); + System.out.println(temp); + System.out.println("ɾ" + root.getData()); + root.setData(temp); + return; + } + } + if (root.getLeft() != null) { + if (root.getLeft().getLeft() == null && root.getLeft().getRight() == null) { + root.setData(root.getLeft().getData()); + root.setLeft(null); + return; + }else if (root.getLeft().getLeft() == null && root.getLeft().getRight() != null){ + Integer temp = root.getLeft().getData(); + System.out.println("ɾ" + temp); + root.setData(temp); + root.setLeft(root.getRight().getRight()); + return; + }else { + Integer temp = getLeftEnd(root.getLeft()); + System.out.println(temp); + System.out.println("ɾ" + root.getData()); + root.setData(temp); + return; + } + } + System.out.println("ɾ" + root.getData()); + root = null; + }else if (root.getData() > data) { + if (root.getLeft().getData().equals(data)&&root.getLeft().getLeft() == null && root.getLeft().getRight() == null) { + System.out.println("ɾ" + root.getLeft().getData()); + root.setLeft(null); + return; + } + deleteData(root.getLeft(),data); + }else if (root.getData() < data) { + if (root.getRight().getData().equals(data)&&root.getRight().getLeft() == null && root.getRight().getRight() == null) { + System.out.println("ɾ" + root.getRight().getData()); + root.setRight(null); + return; + } + deleteData(root.getRight(),data); + } + } + + /** + * + * @param root + */ + private void leftPrint(Node root) { + System.out.print(root.getData() + " "); + if (root.getLeft() != null) { + leftPrint(root.getLeft()); + } + if (root.getRight() != null){ + leftPrint(root.getRight()); + } + } + + /** + * + * @param root + * @param data + */ + private void insertData(Node root,Node data) { + if (root.getData().equals(data.getData())) { + System.out.println("Ѵͬ"); + } + if (root.getData() < data.getData()) { + if (root.getRight() == null) { + root.setRight(data); + System.out.println("ӣ" + data); + return; + } + insertData(root.getRight(),data); + }else if (root.getData() > data.getData()) { + if (root.getLeft() == null) { + root.setLeft(data); + System.out.println("ӣ" + data); + return; + } + insertData(root.getLeft(),data); + } + } + + /** + * + * @param root + */ + private void midPrint(Node root) { + if (root.getLeft() != null) { + midPrint(root.getLeft()); + } + System.out.print(root.getData() + " "); + if (root.getRight() != null) { + midPrint(root.getRight()); + } + } + + /** + * + * @param root + */ + private void rightPrint(Node root) { + if (root.getLeft() != null) { + rightPrint(root.getLeft()); + } + if (root.getRight() != null) { + rightPrint(root.getRight()); + } + System.out.print(root.getData() + " "); + } + + /** + * ɾǰڵڵ㣬ء + * @param root + * @return ǰڵڵ + */ + private Integer getLeftEnd(Node root) { + Integer temp = null; + if (root.getLeft() != null) { + if (root.getLeft().getLeft() != null) { + getLeftEnd(root.getLeft()); + } + temp = root.getLeft().getData(); + root.setLeft(null); + return temp; + }else if (root.getRight() != null) { + temp = root.getData(); + root = root.getRight(); + return temp; + } + temp = root.getData(); + root.setData(null); + return temp; + } +} + diff --git a/Main.java b/Main.java deleted file mode 100644 index d394f77..0000000 --- a/Main.java +++ /dev/null @@ -1,29 +0,0 @@ -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/MainTest.java b/MainTest.java new file mode 100644 index 0000000..15bf32d --- /dev/null +++ b/MainTest.java @@ -0,0 +1,21 @@ +public class MainTest { + public static void main(String[] args) { + BinaryTree binaryTree = new BinaryTree(); + binaryTree.insertData(5); + binaryTree.insertData(3); + binaryTree.insertData(7); + binaryTree.insertData(6); + binaryTree.insertData(4); + binaryTree.insertData(2); + binaryTree.insertData(1); + binaryTree.insertData(9); + binaryTree.insertData(8); + binaryTree.insertData(10); + binaryTree.leftPrint(); + binaryTree.deleteData(8); + binaryTree.leftPrint(); + binaryTree.midPrint(); + binaryTree.rightPrint(); + binaryTree.levelPrint(); + } +} \ No newline at end of file diff --git a/Node.java b/Node.java index d845786..f03165c 100644 --- a/Node.java +++ b/Node.java @@ -1,11 +1,45 @@ -public class Node { - public T value; - public Node left; - public Node right; - - Node(T val){ - value = val; - left = null; - right = null; - } +public class Node { + private Integer data; + private Node left; + private Node right; + + public Node() { + } + + public Node(Integer data) { + this.data = data; + } + + public Integer getData() { + return data; + } + + public void setData(Integer data) { + this.data = data; + } + + public Node getLeft() { + return left; + } + + public void setLeft(Node left) { + this.left = left; + } + + public Node getRight() { + return right; + } + + public void setRight(Node right) { + this.right = right; + } + + @Override + public String toString() { + return "Node{" + + "data=" + data + + ", left=" + left + + ", right=" + right + + '}'; + } } \ No newline at end of file -- Gitee