|
3 | 3 | import processing.core.PApplet; |
4 | 4 | import processing.core.PVector; |
5 | 5 |
|
6 | | -public class TreeNode<T> { |
| 6 | +public class TreeNode<T extends Comparable<T>> { |
7 | 7 | public TreeNode(T data, PApplet pApplet) { |
8 | 8 | this.pApplet = pApplet; |
9 | 9 | this.data = data; |
@@ -126,30 +126,93 @@ private boolean isDescendantOf(TreeNode<T> descendant, TreeNode<T> ancestor) { |
126 | 126 | return false; |
127 | 127 | } |
128 | 128 |
|
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); |
131 | 131 | } |
132 | 132 |
|
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(); |
135 | 137 |
|
136 | 138 | if (node.parent != null) { |
137 | | - move(node.getParent(), main); |
| 139 | + moveLeftRight(node.parent, main); |
138 | 140 | } |
139 | 141 | } |
140 | 142 |
|
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) { |
142 | 205 | if (node != null) { |
143 | 206 | if (node.getLeft() != null && !node.getLeft().isAncestorOf(main)) { |
144 | | - traverse(node.getLeft(), currentNode, main); |
| 207 | + traverseRightLeft(node.getLeft(), currentNode, main); |
145 | 208 | } |
146 | 209 |
|
147 | 210 | if (node != currentNode) { |
148 | | - node.setX(node.getX() - 42); |
| 211 | + node.setX(node.getX() - 22); |
149 | 212 | } |
150 | 213 |
|
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); |
153 | 216 | } |
154 | 217 | } |
155 | 218 | } |
|
0 commit comments