13
13
14
14
public class SizeBalancedTree <T extends Comparable <T >> implements Iterable <T > {
15
15
16
- private static final int DEFAULT_SIZE = 16 ;
17
-
18
16
// Tracks the number of nodes in this tree.
19
17
private int nodeCount = 0 ;
20
18
21
19
// This is a rooted tree so we maintain a handle on the root node.
22
20
private Node root = null ;
23
21
24
- // Size tracks the number of children nodes below this number.
25
- // private int[] sz = new int[DEFAULT_SIZE];
26
-
27
- // TODO: Implement TreePrinter interface
28
22
class Node implements TreePrinter .PrintableNode {
29
23
30
24
T value ;
31
25
32
- // int id;
33
-
34
26
// The number of nodes below this node.
35
27
int sz ;
36
28
37
29
Node left , right ;
38
30
39
31
public Node (T value ) {
40
32
this .value = value ;
41
- id = nodeCount ;
42
- // sz[id] = 0;
43
33
}
44
34
45
35
@ Override
@@ -54,7 +44,7 @@ public Node getRight() {
54
44
55
45
@ Override
56
46
public String getText () {
57
- return String .valueOf (value ) + " (" + sz [ id ] + ")" ;
47
+ return String .valueOf (value ) + " (" + sz + ")" ;
58
48
}
59
49
60
50
}
@@ -92,14 +82,6 @@ public boolean add(T elem) {
92
82
93
83
}
94
84
95
- // private void checkSize() {
96
- // if (nodeCount + 1 == sz.length) {
97
- // int[] newSz = new int[sz.length * 2];
98
- // System.arraycopy(sz, 0, newSz, 0, sz.length);
99
- // sz = newSz;
100
- // }
101
- // }
102
-
103
85
// Private method to recursively add a value in the binary tree
104
86
private Node add (Node node , T elem ) {
105
87
@@ -108,7 +90,7 @@ private Node add(Node node, T elem) {
108
90
node = new Node (elem );
109
91
} else {
110
92
111
- sz [ node .id ] ++;
93
+ node .sz ++;
112
94
113
95
// Pick a subtree to insert element
114
96
if (elem .compareTo (node .value ) < 0 ) {
@@ -127,15 +109,14 @@ private Node add(Node node, T elem) {
127
109
private int sz (Node node ) {
128
110
if (node == null ) return 0 ;
129
111
return node .sz ;
130
- // return sz[node.id];
131
112
}
132
113
133
114
private Node rightRotate (Node node ) {
134
115
Node child = node .left ;
135
116
node .left = child .right ;
136
117
child .right = node ;
137
- sz [ child .id ] = sz (node );
138
- sz [ node .id ] = sz (node .left ) + sz (node .right ) + 1 ;
118
+ child .sz = sz (node );
119
+ node .sz = sz (node .left ) + sz (node .right ) + 1 ;
139
120
return child ;
140
121
}
141
122
0 commit comments