|
|
所以这道题是要实现一个BST,但是BST的node里存的是int类型的key-value pair?
- public class MyHashtable {
-
- private Pair root;
- private int size;
-
- public MyHashtable() {
- root = null;
- size = 0;
- }
-
- public int get(int k) {
- Pair node = search(root, k);
- if (node == null) {
- throw new NoSuchElementException();
- }
- return node.val;
- }
-
- private Pair search(Pair node, int k) {
- if (node == null) {
- return null;
- }
- if (node.key == k) {
- return node;
- }
- if (node.key < k) {
- return search(node.right, k);
- }
- return search(node.left, k);
- }
-
- public void put(int k, int v) {
- if (root == null) {
- root = new Pair(k, v);
- return;
- }
- Pair node = search(root, k);
- if (node != null) {
- node.val = v;
- } else {
- node = new Pair(k, v);
- insert(root, node);
- }
- }
-
- private void insert(Pair node, Pair newNode) {
- if (node.key < newNode.key) {
- if (node.right == null) {
- node.right = newNode;
- } else {
- insert(node.right, newNode);
- }
- } else {
- if (node.left == null) {
- node.left = newNode;
- } else {
- insert(node.left, newNode);
- }
- }
- }
-
- public boolean remove(int k) {
- if (!containsKey(k)) {
- return false;
- }
- root = remove(root, k);
- return true;
- }
-
- private Pair remove(Pair node, int k) {
- if (node == null) {
- return null;
- }
- if (node.key < k) {
- node.right = remove(node.right, k);
- } else if (node.key > k) {
- node.left = remove(node.left, k);
- } else {
- if (node.left == null) {
- return node.right;
- }
- if (node.right == null) {
- return node.right;
- }
- Pair temp = node;
- node = min(temp.right);
- node.right = deleteMin(temp.right);
- node.left = temp.left;
- }
- return node;
- }
-
- private Pair min(Pair node) {
- if (node.left == null) {
- return node;
- }
- return min(node.left);
- }
-
- private Pair deleteMin(Pair node) {
- if (node.left == null) {
- return node.right;
- }
- node.left = deleteMin(node.left);
- return node;
- }
-
- private boolean containsKey(int k) {
- return containsKey(root, k);
- }
-
- private boolean containsKey(Pair node, int k) {
- if (node == null) {
- return false;
- }
- if (node.key == k) {
- return true;
- }
- if (node.key < k) {
- return containsKey(node.right, k);
- } else {
- return containsKey(node.left, k);
- }
- }
-
- public int size() {
- return size;
- }
-
- class Pair {
- int key;
- int val;
- Pair left;
- Pair right;
- public Pair(int k, int v) {
- key = k;
- val = v;
- left = null;
- right = null;
- }
- }
-
-
- public static void main(String[] args) {
- MyHashtable table = new MyHashtable();
- table.put(1, 6);
- table.put(2, 7);
- table.put(3, 8);
-
- System.out.println(table.get(1));
- System.out.println(table.get(2));
- System.out.println(table.get(3));
- table.put(4, 10);
- System.out.println(table.get(4));
- table.remove(4);
- // System.out.println(table.get(4));
- System.out.println(table.get(1));
- table.remove(1);
- // System.out.println(table.get(1));
- }
- }
复制代码 |
|