二分搜索树插入节点

// 由于Key需要能够进行比较,所以需要extends Comparable<Key>
public class BST<Key extends Comparable<Key>, Value> {
    // 树中的节点为私有的类, 外界不需要了解二分搜索树节点的具体实现
    private class Node {
        private Key key;
        private Value value;
        private Node left, right;

        public Node(Key key, Value value) {
            this.key = key;
            this.value = value;
        }
    }

    private Node root;  // 根节点
    private int count;  // 树中的节点个数
    // 构造函数, 默认构造一棵空二分搜索树
    public BST() {
        root = null;
        count = 0;
    }
    // 返回二分搜索树的节点个数
    public int size() {
        return count;
    }
    // 返回二分搜索树是否为空
    public boolean isEmpty() {
        return count == 0;
    }
    // 插入一个节点
    public void insert(Key key, Value value) {
        root = insert(root, key, value);
    }
    // 返回插入新节点后的二分搜索树的根
    private Node insert(Node node, Key key, Value value) {
        // 如果该索引处节点不存在
        if (node == null) {
            count++;
            return new Node(key, value);
        }
        // 如果该索引处节点存在
        if (node.key.compareTo(key) == 0) {
            node.value = value;
        } else if (node.key.compareTo(key) > 0) {
            node.left = insert(node.left, key, value);
        } else if (node.key.compareTo(key) < 0) {
            node.right = insert(node.right, key, value);
        }
        return node;
    }
}

results matching ""

    No results matching ""