annotate src/main/java/jp/ac/u_ryukyu/ie/cr/tatsuki/TreeMap/TreeMap.java @ 9:5da70bcfb824

change delete method
author tatsuki
date Thu, 16 Apr 2015 21:03:44 +0900
parents 97225df15574
children b6739b88edeb
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
1 package jp.ac.u_ryukyu.ie.cr.tatsuki.TreeMap;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
2
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
3
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
4 import java.util.Iterator;
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
5 import java.util.Optional;
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
6
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
7 import static jp.ac.u_ryukyu.ie.cr.tatsuki.TreeMap.Rotate.*;
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
8
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
9 /**
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
10 * Created by e115731 on 15/03/23.
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
11 */
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
12 public class TreeMap<K, V> {
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
13 Node<K, V> root;
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
14 int size;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
15
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
16 public TreeMap() {
4
3de906fb90d1 delete get
tatsuki
parents: 3
diff changeset
17 this.root = new EmptyNode();
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
18 this.size = 0;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
19 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
20
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
21
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
22 public Node getRoot() {
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
23 return root;
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
24 }
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
25
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
26 public TreeMap(Node<K, V> root, int size) {
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
27 this.root = root;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
28 this.size = size;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
29 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
30
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
31 public Optional<V> get(K key) {
5
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
32 return root.get(key);
2
d8f78957698f add getLoop
tatsuki
parents: 1
diff changeset
33 }
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
34
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
35 public TreeMap put(K key, V value) {
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
36
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
37 if (key == null || value == null) // null check
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
38 throw new NullPointerException();
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
39
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
40 if (isEmpty()) {
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
41 Node<K, V> newRoot = new BlackNode(key, value, new EmptyNode(), new EmptyNode());
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
42 return new TreeMap<K, V>(newRoot, size++);
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
43 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
44
5
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
45 Node<K, V> newEntry = root.put(key, value);
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
46 Node<K, V> newRoot = new BlackNode(newEntry.getKey(), newEntry.getValue(), newEntry.left(), newEntry.right());
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
47 return new TreeMap(newRoot, 0);
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
48 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
49
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
50
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
51 public boolean isEmpty() {
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
52 return root == null;
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
53 }
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
54
9
5da70bcfb824 change delete method
tatsuki
parents: 8
diff changeset
55
5
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
56 public TreeMap<K,V> delete(K key) {
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
57 Node node = root.delete(key,null);
6
710680857286 bag fix rebuildFour
tatsuki
parents: 5
diff changeset
58
710680857286 bag fix rebuildFour
tatsuki
parents: 5
diff changeset
59 if (node == null)
710680857286 bag fix rebuildFour
tatsuki
parents: 5
diff changeset
60 return this; // not key
710680857286 bag fix rebuildFour
tatsuki
parents: 5
diff changeset
61
7
6c3147a90b56 minner change
tatsuki
parents: 6
diff changeset
62 if (!node.exitNode())
6c3147a90b56 minner change
tatsuki
parents: 6
diff changeset
63 return new TreeMap(new EmptyNode<>(),0);
5
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
64 Node newRoot = new BlackNode(node.getKey(),node.getValue(),node.left(),node.right());
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
65 return new TreeMap(newRoot,0);
6928ef8ba6f0 implement delete
tatsuki
parents: 4
diff changeset
66 }
1
969798e3d330 change state pattern
tatsuki
parents: 0
diff changeset
67
7
6c3147a90b56 minner change
tatsuki
parents: 6
diff changeset
68 public void checkBlackCount(){
6c3147a90b56 minner change
tatsuki
parents: 6
diff changeset
69 root.checkBlackCount(0);
8
97225df15574 delete bag fix
tatsuki
parents: 7
diff changeset
70 System.out.println("-----------------------------------");
7
6c3147a90b56 minner change
tatsuki
parents: 6
diff changeset
71 }
0
79ea730fa2f1 Implementation TreeMap.get & TreeMap.put
tatsuki
parents:
diff changeset
72 }