更新时间:2023-03-06 来源:黑马程序员 浏览量:
Java中的二进制搜索树(Binary Search Tree,简称BST)是一种基于二分查找的数据结构,其中每个节点都包含一个键值和对应的值,同时满足以下性质:
1.左子树上所有节点的键值都小于它的根节点的键值。
2.右子树上所有节点的键值都大于它的根节点的键值。
3.每个子树都是BST。
以下是Java代码实现二进制搜索树的基本操作(kotlin):
public class BinarySearchTree { private Node root; private class Node { private int key; private Node left, right; public Node(int key) { this.key = key; } } public BinarySearchTree() { root = null; } // 插入操作 public void insert(int key) { root = insert(root, key); } private Node insert(Node x, int key) { if (x == null) return new Node(key); if (key < x.key) x.left = insert(x.left, key); else if (key > x.key) x.right = insert(x.right, key); return x; } // 查找操作 public boolean contains(int key) { return contains(root, key); } private boolean contains(Node x, int key) { if (x == null) return false; if (key == x.key) return true; else if (key < x.key) return contains(x.left, key); else return contains(x.right, key); } // 删除操作 public void delete(int key) { root = delete(root, key); } private Node delete(Node x, int key) { if (x == null) return null; if (key < x.key) x.left = delete(x.left, key); else if (key > x.key) x.right = delete(x.right, key); else { if (x.right == null) return x.left; if (x.left == null) return x.right; Node t = x; x = min(t.right); x.right = deleteMin(t.right); x.left = t.left; } return x; } private Node deleteMin(Node x) { if (x.left == null) return x.right; x.left = deleteMin(x.left); return x; } private Node min(Node x) { if (x.left == null) return x; return min(x.left); } }
以上是基本的二进制搜索树操作,包括插入、查找、删除等。需要注意的是,这里实现的二进制搜索树并不是平衡树,因此在最坏情况下,树的高度可能会达到 $N$,其中 $N$ 是树中节点的数量,导致时间复杂度退化为 $O(N)$。为了解决这个问题,可以使用平衡二叉树(如红黑树、AVL树等)来代替二进制搜索树。