-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathTree.java
144 lines (117 loc) · 2.92 KB
/
Tree.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
public class Tree {
private class Node {
Student student;
Node parent;
Node leftChild;
Node rightChild;
public Node(){
}
public Node(Student student){
this.student = student;
}
public String toString(){
String result = "";
String nl = "\n";
result += student.nummer+nl;
if (leftChild != null) result = leftChild.toString()+result;
if (rightChild != null) result += rightChild.toString();
return result;
}
int levelsDown(int levels){
int left = 0, right = 0;
if (leftChild != null) left = leftChild.levelsDown(levels+1);
if (rightChild != null) right = rightChild.levelsDown(levels+1);
return Math.max(levels, Math.max(left, right));
}
int levelsUp(int levels){
if (parent != null) levels = parent.levelsUp(levels+1);
return levels;
}
}
private Node root;
private int numberOfItems;
//---------------------------
// Constructors
public Tree(Student student){
root = new Node();
root.student = student;
numberOfItems = 1;
}
//--------------------------
//Data structure operations
/**
* Voeg een element toe aan de tree
*/
public void insert(Student student){
Node node = findClosest(student.nummer, root);
if (node != null){
if (node.student.nummer > student.nummer){
node.leftChild = new Node(student);
node.leftChild.parent = node;
} else {
node.rightChild = new Node(student);
node.rightChild.parent = node;
}
numberOfItems++;
}
}
/**
* Verwijder een object uit de boom
*/
public void remove(/*Studentnummer*/){
}
/**
* Zoek een studentnummer in de boom en return
* het oject
*/
public Node find(int nummer, Node node){
if (node.student.nummer == nummer){
return node;
}
if (node.student.nummer > nummer){
if (node.leftChild == null) return null;
return find(nummer, node.leftChild);
}
if (node.student.nummer < nummer){
if (node.rightChild == null) return null;
return find(nummer, node.rightChild);
}
return null;
}
public Node findClosest(int nummer, Node node){
if (node.student.nummer == nummer){
return null;
}
if (node.student.nummer > nummer){
if (node.leftChild == null) return node;
return findClosest(nummer, node.leftChild);
}
if (node.student.nummer < nummer){
if (node.rightChild == null) return node;
return findClosest(nummer, node.rightChild);
}
return null;
}
public boolean isBalanced(){
System.out.println("n: "+numberOfItems);
System.out.println("h: "+depth());
if (
(numberOfItems > (int)Math.pow(2, root.levelsDown(0))-1) &&
(numberOfItems <= (int)Math.pow(2, root.levelsDown(0)+1)-1)
) return true;
return false;
}
public void balance(){
}
public int depth(){
return root.levelsDown(0);
}
//------------------------------------------------------
// Utility methods
/**
* Print de tree In-Order
*/
public String toString(){
return root.toString();
}
}