java写一个二叉排序树
时间: 2023-05-31 07:04:41 浏览: 61
以下是一个简单的Java二叉排序树的实现:
```
public class BinarySearchTree {
private Node root;
private class Node {
private int key;
private Node left, right;
public Node(int key) {
this.key = key;
left = null;
right = null;
}
}
public BinarySearchTree() {
root = null;
}
public boolean isEmpty() {
return root == null;
}
public void insert(int key) {
root = insert(root, key);
}
private Node insert(Node node, int key) {
if (node == null) {
node = new Node(key);
return node;
}
if (key < node.key) {
node.left = insert(node.left, key);
} else if (key > node.key) {
node.right = insert(node.right, key);
}
return node;
}
public void delete(int key) {
root = delete(root, key);
}
private Node delete(Node node, int key) {
if (node == null) {
return node;
}
if (key < node.key) {
node.left = delete(node.left, key);
} else if (key > node.key) {
node.right = delete(node.right, key);
} else {
if (node.left == null) {
return node.right;
} else if (node.right == null) {
return node.left;
}
node.key = minValue(node.right);
node.right = delete(node.right, node.key);
}
return node;
}
private int minValue(Node node) {
int minv = node.key;
while (node.left != null) {
minv = node.left.key;
node = node.left;
}
return minv;
}
public boolean search(int key) {
return search(root, key);
}
private boolean search(Node node, int key) {
if (node == null) {
return false;
}
if (key == node.key) {
return true;
} else if (key < node.key) {
return search(node.left, key);
} else {
return search(node.right, key);
}
}
public void inorder() {
inorder(root);
}
private void inorder(Node node) {
if (node != null) {
inorder(node.left);
System.out.print(node.key + " ");
inorder(node.right);
}
}
public static void main(String[] args) {
BinarySearchTree bst = new BinarySearchTree();
bst.insert(50);
bst.insert(30);
bst.insert(20);
bst.insert(40);
bst.insert(70);
bst.insert(60);
bst.insert(80);
System.out.println("Inorder traversal of the given tree:");
bst.inorder();
System.out.println("\nDelete 20");
bst.delete(20);
System.out.println("Inorder traversal after deletion of 20:");
bst.inorder();
System.out.println("\nDelete 30");
bst.delete(30);
System.out.println("Inorder traversal after deletion of 30:");
bst.inorder();
System.out.println("\nDelete 50");
bst.delete(50);
System.out.println("Inorder traversal after deletion of 50:");
bst.inorder();
}
}
```
在这个实现中,每个节点都包含一个整数值`key`和指向左子树和右子树的指针。`insert()`方法用于向树中插入一个新的节点,`delete()`方法用于从树中删除一个节点,`search()`方法用于查找一个节点,`inorder()`方法用于按照中序遍历的方式遍历树中的节点。在`main()`方法中,我们创建了一个新的二叉排序树,并向其中插入了一些节点。我们还演示了如何删除一个节点,并按照中序遍历的方式遍历树中的节点。