欢迎访问宙启技术站
智能推送

Java函数:二叉搜索树算法实现

发布时间:2023-05-20 15:41:14

Java函数:二叉搜索树算法实现

二叉搜索树(Binary Search Tree, BST)是一种基于树的数据结构,它包含一些节点,每个节点最多有两个子节点:一个称为左子节点,另一个称为右子节点。这些节点的值按照一定的顺序排列,使得对于任意一个节点,其左子树上的所有节点的值都小于该节点的值,而右子树上的所有节点的值都大于该节点的值。

在本文中,我们将介绍如何在 Java 中实现二叉搜索树算法。为了方便起见,我们将定义一个名为 BST 的类,其中包含以下基本操作:

1. insert(int value) - 将给定的值插入到 BST 中。

2. search(int value) - 在 BST 中查找给定的值是否存在。

3. delete(int value) - 从 BST 中删除给定的值。

代码实现如下:

public class BST {
    class Node {
        int val;
        Node left, right;
        public Node(int val) {
            this.val = val;
            left = right = null;
        }
    }

    private Node root;

    public BST() {
        root = null;
    }

    public void insert(int val) {
        root = insertRec(root, val);
    }

    private Node insertRec(Node root, int val) {
        if (root == null) {
            root = new Node(val);
            return root;
        }
        if (val < root.val)
            root.left = insertRec(root.left, val);
        else if (val > root.val)
            root.right = insertRec(root.right, val);
        return root;
    }

    public boolean search(int val) {
        return searchRec(root, val);
    }

    private boolean searchRec(Node root, int val) {
        if (root == null)
            return false;
        if (root.val == val)
            return true;
        if (val < root.val)
            return searchRec(root.left, val);
        else
            return searchRec(root.right, val);
    }

    public void delete(int val) {
        root = deleteRec(root, val);
    }

    private Node deleteRec(Node root, int val) {
        if (root == null)
            return root;
        if (val < root.val)
            root.left = deleteRec(root.left, val);
        else if (val > root.val)
            root.right = deleteRec(root.right, val);
        else {
            if (root.left == null)
                return root.right;
            else if (root.right == null)
                return root.left;
            root.val = minValue(root.right);
            root.right = deleteRec(root.right, root.val);
        }
        return root;
    }

    private int minValue(Node node) {
        int minv = node.val;
        while (node.left != null) {
            minv = node.left.val;
            node = node.left;
        }
        return minv;
    }
}

其中,我们使用了一个 Node 类来表示 BST 中的每个节点。该类包含值(val)以及其左右子节点的引用。BST 类包含了 BST 的根节点(root)以及三个基本操作(insert,search 和 delete)。

在 insert 操作中,我们先检查 BST 是否为空。如果是,我们将新的节点插入为根节点。否则,我们将值与树的当前节点进行比较,如果小于当前节点的值,则向左子树移动,否则向右子树移动,直到找到一个没有子节点的节点,并将新的节点插入为其左子节点或右子节点。

在 search 操作中,我们使用递归方式进行 BST 的遍历,从根节点开始,按照 BST 的顺序依次访问每个节点。如果找到节点的值与给定的值相等,则返回 true,否则继续查找其左子树或右子树。

在 delete 操作中,我们首先检查 BST 是否为空。如果是,直接返回 null。然后我们按照 BST 的顺序遍历树,寻找要删除的节点。如果要删除的节点没有左子节点或右子节点,我们只需要用其另一个子节点替换该节点。否则,我们需要查找其右子树中的最小值,并用该值替换要删除的节点。最后,我们递归删除要删除的节点。

这就是在 Java 中实现二叉搜索树算法的方法。在使用 BST 的时候,我们只需要创建一个 BST 对象,并调用其 insert,search 和 delete 等操作即可。