首页 > Java > java教程 > 正文

Java 中从头开始的二叉搜索树

WBOY
发布: 2024-07-17 22:19:03
原创
829 人浏览过

Binary Search Tree from Scratch in Java

简介
二叉搜索树 (BST) 是一种二叉树,其中每个节点最多有两个子节点,称为左子节点和右子节点。对于每个节点,左子树仅包含值小于该节点值的节点,右子树仅包含值大于该节点值的节点。 BST 用于高效的搜索、插入和删除操作。

为什么使用二叉搜索树?
BST 有几个优点:

高效搜索:搜索、插入、删除的平均时间复杂度为 O(log n)。
动态项目集:与静态数组不同,支持动态操作。
有序元素:BST 的中序遍历会产生按排序顺序排列的元素。
构建 BST 的分步指南
步骤一:定义节点结构
第一步是定义树中节点的结构。每个节点将具有三个属性:一个值、对左子节点的引用以及对右子节点的引用。

public class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}
登录后复制

第 2 步:使用构造函数创建 BST 类
接下来,我们创建 BST 类,其中包含对树根的引用以及插入元素的方法。

public class BinarySearchTree {
    TreeNode root;

    public BinarySearchTree() {
        this.root = null;
    }
}
登录后复制

第3步:实现插入方法
要将元素插入 BST,我们需要找到新节点的正确位置。插入方法通常作为递归函数实现。

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

private TreeNode insertRec(TreeNode root, int value) {
    // Base case: if the tree is empty, return a new node
    if (root == null) {
        root = new TreeNode(value);
        return root;
    }

    // Otherwise, recur down the tree
    if (value < root.value) {
        root.left = insertRec(root.left, value);
    } else if (value > root.value) {
        root.right = insertRec(root.right, value);
    }

    // Return the (unchanged) node pointer
    return root;
}
登录后复制

可视化
为了更好地理解插入是如何工作的,让我们考虑一个例子。假设我们要在 BST 中插入以下数字序列:50, 30, 70, 20, 40, 60, 80。

50
登录后复制
  50
 /
30
登录后复制
  50
 /  \
30  70
登录后复制
50
 /  \
30  70
/
登录后复制

插入 40:

  50
 /  \
30  70
/ \
登录后复制

插入 60

  50
 /  \
30  70
/ \  /

登录后复制

插入 80:

  50
 /  \
30  70
/ \  / \
登录后复制

完整代码
以下是创建 BST 和插入元素的完整代码:

public class BinarySearchTree {
    TreeNode root;

    public BinarySearchTree() {
        this.root = null;
    }

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

    private TreeNode insertRec(TreeNode root, int value) {
        if (root == null) {
            root = new TreeNode(value);
            return root;
        }

        if (value < root.value) {
            root.left = insertRec(root.left, value);
        } else if (value > root.value) {
            root.right = insertRec(root.right, value);
        }

        return root;
    }

    // Additional methods for traversal, search, and delete can be added here

    public static void main(String[] args) {
        BinarySearchTree bst = new BinarySearchTree();
        int[] values = {50, 30, 70, 20, 40, 60, 80};
        for (int value : values) {
            bst.insert(value);
        }

        // Add code to print or traverse the tree
    }
}

class TreeNode {
    int value;
    TreeNode left;
    TreeNode right;

    TreeNode(int value) {
        this.value = value;
        this.left = null;
        this.right = null;
    }
}

登录后复制

以上是Java 中从头开始的二叉搜索树的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!