Skip to content

Commit 557c9f5

Browse files
committed
Commit: 1.5
1 parent c84593f commit 557c9f5

File tree

2 files changed

+83
-12
lines changed

2 files changed

+83
-12
lines changed

src/processing/tree/BinarySearchTree.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ private TreeNode<T> add(TreeNode<T> node, T data, float x, float y) {
2828
node.setLeft(new TreeNode<>(data, pApplet), node, root);
2929

3030
if (node.getLeft().isDescendantOf(root.getRight())) {
31-
node.moveLeftSiblings(node.getParent(), node.getLeft());
31+
node.moveRightLeftSiblings(node.getParent(), node.getLeft());
3232
}
3333
}
3434

@@ -40,6 +40,14 @@ private TreeNode<T> add(TreeNode<T> node, T data, float x, float y) {
4040
else if (data.compareTo(node.getData()) > 0) {
4141
if (node.getRight() == null) {
4242
node.setRight(new TreeNode<>(data, pApplet), node);
43+
44+
if (node.getRight().isDescendantOf(root.getRight()) && node.getRight() != root.getRight()) {
45+
node.moveRightRightSiblings(node.getParent(), node.getRight());
46+
}
47+
48+
else if (node.getRight().isDescendantOf(root.getLeft())) {
49+
node.moveLeftRightSiblings(node.getParent(), node.getRight());
50+
}
4351
}
4452

4553
else {

src/processing/tree/TreeNode.java

Lines changed: 74 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import processing.core.PApplet;
44
import processing.core.PVector;
55

6-
public class TreeNode<T> {
6+
public class TreeNode<T extends Comparable<T>> {
77
public TreeNode(T data, PApplet pApplet) {
88
this.pApplet = pApplet;
99
this.data = data;
@@ -126,30 +126,93 @@ private boolean isDescendantOf(TreeNode<T> descendant, TreeNode<T> ancestor) {
126126
return false;
127127
}
128128

129-
public void moveLeftSiblings(TreeNode<T> node, TreeNode<T> main) {
130-
move(node, main);
129+
public void moveLeftRightSiblings(TreeNode<T> node, TreeNode<T> main) {
130+
moveLeftRight(node, main);
131131
}
132132

133-
public void move(TreeNode<T> node, TreeNode<T> main) {
134-
traverse(node, node, main);
133+
private void moveLeftRight(TreeNode<T> node, TreeNode<T> main) {
134+
System.out.println("CURRENT DATA: " + node.data);
135+
traverseLeftRight(node, node, main);
136+
System.out.println();
135137

136138
if (node.parent != null) {
137-
move(node.getParent(), main);
139+
moveLeftRight(node.parent, main);
138140
}
139141
}
140142

141-
private void traverse(TreeNode<T> node, TreeNode<T> currentNode, TreeNode<T> main) {
143+
private void traverseLeftRight(TreeNode<T> node, TreeNode<T> currentNode, TreeNode<T> main) {
144+
if (node != null) {
145+
if (node.right != null && !node.right.isAncestorOf(main)) {
146+
traverseLeftRight(node.right, currentNode, main);
147+
}
148+
149+
if (node != currentNode) {
150+
node.pos.x = node.pos.x + 22;
151+
}
152+
153+
if (node.left != null && !node.left.isAncestorOf(main) && node.left.data.compareTo(main.data) > 0) {
154+
traverseLeftRight(node.left, currentNode, main );
155+
}
156+
}
157+
}
158+
159+
public void moveRightRightSiblings(TreeNode<T> node, TreeNode<T> main) {
160+
moveRightRight(node, main);
161+
}
162+
163+
private void moveRightRight(TreeNode<T> node, TreeNode<T> main) {
164+
System.out.println("CURRENT NODE: " + node.data);
165+
traverseRightRight(node, node, main);
166+
System.out.println();
167+
168+
if (node.parent != null) {
169+
moveRightRight(node.parent, main);
170+
}
171+
}
172+
173+
private void traverseRightRight(TreeNode<T> node, TreeNode<T> currentNode, TreeNode<T> main) {
174+
if (node != null) {
175+
if (node.right != null && !node.right.isAncestorOf(main)) {
176+
traverseRightRight(node.right, currentNode, main);
177+
}
178+
179+
if (node != currentNode) {
180+
node.pos.x = node.pos.x + 22;
181+
}
182+
183+
if (node.left != null && !node.left.isAncestorOf(main) && node.left.data.compareTo(main.data) > 0) {
184+
traverseRightRight(node.left, currentNode, main);
185+
}
186+
}
187+
}
188+
189+
public void moveRightLeftSiblings(TreeNode<T> node, TreeNode<T> main) {
190+
moveRightLeft(node, main);
191+
}
192+
193+
private void moveRightLeft(TreeNode<T> node, TreeNode<T> main) {
194+
System.out.println("CURRENT NODE: " + node.data);
195+
196+
traverseRightLeft(node, node, main);
197+
198+
System.out.println();
199+
if (node.parent != null) {
200+
moveRightLeft(node.parent, main);
201+
}
202+
}
203+
204+
private void traverseRightLeft(TreeNode<T> node, TreeNode<T> currentNode, TreeNode<T> main) {
142205
if (node != null) {
143206
if (node.getLeft() != null && !node.getLeft().isAncestorOf(main)) {
144-
traverse(node.getLeft(), currentNode, main);
207+
traverseRightLeft(node.getLeft(), currentNode, main);
145208
}
146209

147210
if (node != currentNode) {
148-
node.setX(node.getX() - 42);
211+
node.setX(node.getX() - 22);
149212
}
150213

151-
if (node.getRight() != null && node.getSibling() != null && !node.getRight().isAncestorOf(main) && node.getRight() != node.getSibling()) {
152-
traverse(node.getRight(), currentNode, main);
214+
if (node.getRight() != null && !node.getRight().isAncestorOf(main) && !node.right.parent.isAncestorOf(main)) {
215+
traverseRightLeft(node.getRight(), currentNode, main);
153216
}
154217
}
155218
}

0 commit comments

Comments
 (0)