BAEL -1339 Implement a binary tree in Java (#3301)
* edge cases binary tree * code cleanup
This commit is contained in:
parent
0a76081ac3
commit
5e25e2c3ea
|
@ -8,15 +8,7 @@ public class BinaryTree {
|
||||||
Node root;
|
Node root;
|
||||||
|
|
||||||
public void add(int value) {
|
public void add(int value) {
|
||||||
|
root = addRecursive(root, value);
|
||||||
Node newNode = new Node(value);
|
|
||||||
|
|
||||||
if (root == null) {
|
|
||||||
root = newNode;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
addRecursive(root, value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Node addRecursive(Node current, int value) {
|
private Node addRecursive(Node current, int value) {
|
||||||
|
@ -27,18 +19,32 @@ public class BinaryTree {
|
||||||
|
|
||||||
if (value < current.value) {
|
if (value < current.value) {
|
||||||
current.left = addRecursive(current.left, value);
|
current.left = addRecursive(current.left, value);
|
||||||
} else {
|
} else if (value > current.value) {
|
||||||
current.right = addRecursive(current.right, value);
|
current.right = addRecursive(current.right, value);
|
||||||
|
} else {
|
||||||
|
// value already exists
|
||||||
|
return current;
|
||||||
}
|
}
|
||||||
|
|
||||||
return current;
|
return current;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEmpty() {
|
public boolean isEmpty() {
|
||||||
return root == null;
|
return root == null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSize() {
|
||||||
|
return getSizeRecursive(root);
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getSizeRecursive(Node current) {
|
||||||
|
if (current == null) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return getSizeRecursive(current.left) + 1 + getSizeRecursive(current.right);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean containsNode(int value) {
|
public boolean containsNode(int value) {
|
||||||
return containsNodeRecursive(root, value);
|
return containsNodeRecursive(root, value);
|
||||||
}
|
}
|
||||||
|
@ -125,12 +131,15 @@ public class BinaryTree {
|
||||||
if (node != null) {
|
if (node != null) {
|
||||||
traversePostOrder(node.left);
|
traversePostOrder(node.left);
|
||||||
traversePostOrder(node.right);
|
traversePostOrder(node.right);
|
||||||
|
|
||||||
System.out.print(" " + node.value);
|
System.out.print(" " + node.value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void traverseLevelOrder() {
|
public void traverseLevelOrder() {
|
||||||
|
if (root == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Queue<Node> nodes = new LinkedList<>();
|
Queue<Node> nodes = new LinkedList<>();
|
||||||
nodes.add(root);
|
nodes.add(root);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package com.baeldung.tree;
|
package com.baeldung.tree;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
|
@ -26,6 +27,26 @@ public class BinaryTreeTest {
|
||||||
assertFalse(bt.containsNode(1));
|
assertFalse(bt.containsNode(1));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenABinaryTree_WhenAddingExistingElement_ThenElementIsNotAdded() {
|
||||||
|
|
||||||
|
BinaryTree bt = createBinaryTree();
|
||||||
|
|
||||||
|
int initialSize = bt.getSize();
|
||||||
|
|
||||||
|
assertTrue(bt.containsNode(3));
|
||||||
|
bt.add(3);
|
||||||
|
assertEquals(initialSize, bt.getSize());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenABinaryTree_WhenLookingForNonExistingElement_ThenReturnsFalse() {
|
||||||
|
|
||||||
|
BinaryTree bt = createBinaryTree();
|
||||||
|
|
||||||
|
assertFalse(bt.containsNode(99));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenABinaryTree_WhenDeletingElements_ThenTreeDoesNotContainThoseElements() {
|
public void givenABinaryTree_WhenDeletingElements_ThenTreeDoesNotContainThoseElements() {
|
||||||
|
|
||||||
|
@ -36,6 +57,19 @@ public class BinaryTreeTest {
|
||||||
assertFalse(bt.containsNode(9));
|
assertFalse(bt.containsNode(9));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenABinaryTree_WhenDeletingNonExistingElement_ThenTreeDoesNotDelete() {
|
||||||
|
|
||||||
|
BinaryTree bt = createBinaryTree();
|
||||||
|
|
||||||
|
int initialSize = bt.getSize();
|
||||||
|
|
||||||
|
assertFalse(bt.containsNode(99));
|
||||||
|
bt.delete(99);
|
||||||
|
assertFalse(bt.containsNode(99));
|
||||||
|
assertEquals(initialSize, bt.getSize());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void givenABinaryTree_WhenTraversingInOrder_ThenPrintValues() {
|
public void givenABinaryTree_WhenTraversingInOrder_ThenPrintValues() {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue