/**
*
* @author gao.mq
*
* @param <Key>
* @param <Value>
*/
public class BST<Key extends Comparable<Key>, Value> {
private Node root;
private class Node {
private Key key;
private Value value;
private Node left, right;
private int N;
public Node(Key key, Value val, int N) {
this.key = key;
this.value = val;
this.N = N;
}
}
public int size() {
return size(root);
}
private int size(Node x) {
if (x == null) {
return 0;
} else {
return x.N;
}
}
public Value get(Key key) {
return get(root, key);
}
private Value get(Node root, Key key) {
if (root == null) {
return null;
}
int cmp = key.compareTo(root.key);
if (cmp < 0) {
return get(root.left, key);
} else if (cmp > 0) {
return get(root.right, key);
} else
return root.value;
}
public void put(Key key, Value value) {
root = put(root, key, value);
}
//注意这里的递归调用,如果存在更新值,不存在则插入新的结点。
private Node put(Node root, Key key, Value value) {
if (root == null) {
return new Node(key, value, 1);
}
int cmp = key.compareTo(root.key);
if (cmp < 0) {
root.left = put(root.left, key, value);
} else if (cmp > 0) {
root.right = put(root.right, key, value);
} else
root.value = value;
root.N = size(root.left) + size(root.right) + 1;
return root;
}
public static void main(String args[]) {
BST<Integer, Integer> bst = new BST<>();
bst.put(3, 2);
bst.put(1, 3);
bst.put(3, 6);
bst.put(5, 1);
bst.put(7, 9);
}
}