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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user