From c11d973cbe0f23f4d24d0e79869536aaf6a3e0f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=B1=E6=96=87=E6=BB=A8?= <1243386446@qq.com> Date: Tue, 24 Nov 2020 21:05:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9C=E4=B8=9Ar=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Tree.java | 116 ++++++++++++++++++++++++++++++++++++++++++++++++++ TreeDemo.java | 42 ++++++++++++++++++ TreeNode.java | 14 ++++++ 3 files changed, 172 insertions(+) create mode 100644 Tree.java create mode 100644 TreeDemo.java create mode 100644 TreeNode.java diff --git a/Tree.java b/Tree.java new file mode 100644 index 0000000..1929c6d --- /dev/null +++ b/Tree.java @@ -0,0 +1,116 @@ +package Tree; + +import java.util.Stack; + +public class Tree { + TreeNode root; + +public void insert(TreeNode s) { + TreeNode p = null; + TreeNode t = root; + while(t != null){ + p = t; + if(s.key < t.key){ + t = t.left; + }else{ + t = t.right; + } + } + s.p = p; + if(p == null){ + root = s; + }else if(s.key > p.key){ + p.right = s; + }else{ + p.left = s; + } +} +public void delete(TreeNode node){ + if(node.left == null){ + transplant(node, node.right); + }else if(node.right == null){ + transplant(node, node.left); + }else{ + TreeNode s = minimum(node.right); + if(s.p != node){ + transplant(s,s.right); + s.right = node.right; + s.right.p = s; + } + transplant(node,s); + s.left = node.left; + s.left.p = s; + } +} +private void transplant(TreeNode u,TreeNode v){ + if(u.p == null){ + root = v; + }else if(u == u.p.left){ + u.p.left = v; + }else{ + u.p.right = v; + } + if(v != null){ + v.p = u.p; + } +} +private TreeNode minimum(TreeNode x){ + if(root == null){ + return null; + } + while(x.left != null){ + x = x.left; + } + return x; +} + +private TreeNode maximum(TreeNode x){ + if(x==null){ + return null; + } + while(x.right!=null){ + x = x.right; + } + return x; + +} +public TreeNode search(int key){ //查找 + TreeNode node = root; + while(node!=null){ + if(key < node.key){ + node = node.left; + }else if(key>node.key){ + node = node.right; + }else{ + return node; + } + } + return null; +} +public void inorderTraversal(TreeNode root) {//中 + if(root != null) { + preordertraversal(root.left); + System.out.print(root.key); + preordertraversal(root.right) ; + } + +} +public void preordertraversal(TreeNode root) {//前 + if(root != null) { + System.out.print(root.key); + preordertraversal(root.left); + preordertraversal(root.right) ; + } + +} + public void postordertraversal(TreeNode root) { //后 + if(root != null) { + preordertraversal(root.left); + preordertraversal(root.right) ; + System.out.print(root.key); + + } + +} +} + diff --git a/TreeDemo.java b/TreeDemo.java new file mode 100644 index 0000000..ed9708f --- /dev/null +++ b/TreeDemo.java @@ -0,0 +1,42 @@ +package Tree; + +public class TreeDemo { + + public static void main(String[] args) { + TreeNode root = new TreeNode(5); + TreeNode one = new TreeNode(3); + TreeNode two = new TreeNode(6); + TreeNode three = new TreeNode(4); + TreeNode four = new TreeNode(2); + TreeNode five = new TreeNode(7); + Tree T =new Tree(); + T.insert(root); + T.insert(one); + T.insert(two); + T.insert(three); + T.insert(four); + T.insert(five); + System.out.print("前序遍历树:"); + T.preordertraversal(root); + System.out.println(""); + System.out.print("中序遍历:"); + T.inorderTraversal(root); + System.out.println(""); + System.out.print("后序遍历树:"); + T.postordertraversal(root); + System.out.println(""); + System.out.println("查找元素:"+T.search(1)); + System.out.println("查找元素:"+T.search(4)); + System.out.println("--------------------"); + T.delete(two); + System.out.print("删除元素后前序遍历树:"); + T.preordertraversal(root); + System.out.println(""); + System.out.print("删除元素后的中序遍历:"); + T.inorderTraversal(root); + System.out.println(""); + System.out.print("删除元素后序遍历树:"); + T.postordertraversal(root); + } + +} diff --git a/TreeNode.java b/TreeNode.java new file mode 100644 index 0000000..32ca583 --- /dev/null +++ b/TreeNode.java @@ -0,0 +1,14 @@ +package Tree; + +public class TreeNode { + int key; + TreeNode left; + TreeNode right; + TreeNode p; //数据 + public TreeNode(int s) { + this.key=s; + } + public String toString() { + return key+""; + } +} -- Gitee