diff --git a/DIRECTORY.md b/DIRECTORY.md index d19c59d9f..4e20adc8b 100644 --- a/DIRECTORY.md +++ b/DIRECTORY.md @@ -586,6 +586,7 @@ * [BSTRecursiveTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/BSTRecursiveTest.java) * [CeilInBinarySearchTreeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/CeilInBinarySearchTreeTest.java) * [CheckBinaryTreeIsValidBSTTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/CheckBinaryTreeIsValidBSTTest.java) + * [CheckIfBinaryTreeBalancedTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/CheckIfBinaryTreeBalancedTest.java) * [CheckTreeIsSymmetricTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/CheckTreeIsSymmetricTest.java) * [CreateBinaryTreeFromInorderPreorderTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/CreateBinaryTreeFromInorderPreorderTest.java) * [InorderTraversalTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/trees/InorderTraversalTest.java) @@ -687,6 +688,7 @@ * [CountWordsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/CountWordsTest.java) * [CRC16Test](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/CRC16Test.java) * [CRCAlgorithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/CRCAlgorithmTest.java) + * [EulersFunctionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/EulersFunctionTest.java) * [FirstFitCPUTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/FirstFitCPUTest.java) * [KadaneAlogrithmTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/KadaneAlogrithmTest.java) * [LineSweepTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/LineSweepTest.java) @@ -695,6 +697,7 @@ * [NewManShanksPrimeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/NewManShanksPrimeTest.java) * [NextFitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/NextFitTest.java) * [PasswordGenTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/PasswordGenTest.java) + * [SieveOfEratosthenesTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/SieveOfEratosthenesTest.java) * [TestPrintMatrixInSpiralOrder](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/TestPrintMatrixInSpiralOrder.java) * [TwoPointersTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/TwoPointersTest.java) * [UniquePathsTests](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/UniquePathsTests.java) diff --git a/src/main/java/com/thealgorithms/datastructures/trees/CheckIfBinaryTreeBalanced.java b/src/main/java/com/thealgorithms/datastructures/trees/CheckIfBinaryTreeBalanced.java index c4d6ff94a..9dd50245b 100644 --- a/src/main/java/com/thealgorithms/datastructures/trees/CheckIfBinaryTreeBalanced.java +++ b/src/main/java/com/thealgorithms/datastructures/trees/CheckIfBinaryTreeBalanced.java @@ -5,9 +5,9 @@ import java.util.Stack; /** * This class will check if a BinaryTree is balanced. A balanced binary tree is - * defined as a binary tree where the differenced in height between the left and + * defined as a binary tree where the difference in height between the left and * right subtree of each node differs by at most one. - * + *
* This can be done in both an iterative and recursive fashion. Below,
* `isBalancedRecursive()` is implemented in a recursive fashion, and
* `isBalancedIterative()` is implemented in an iterative fashion.
@@ -15,59 +15,22 @@ import java.util.Stack;
* @author [Ian Cowan](https://github.com/iccowan)
*/
public class CheckIfBinaryTreeBalanced {
-
- /**
- * This class implements the BinaryTree for these algorithms
- */
- class BinaryTree {
-
- /**
- * The root node of the binary tree
- */
- BTNode root = null;
- }
-
- /**
- * This class implements the nodes for the binary tree
- */
- class BTNode {
-
- /**
- * The value of the node
- */
- int value;
-
- /**
- * The left child of the node
- */
- BTNode left = null;
-
- /**
- * The right child of the node
- */
- BTNode right = null;
-
- /**
- * Constructor
- */
- BTNode(int value) {
- this.value = value;
- }
- }
-
/**
* Recursive is BT balanced implementation
*
- * @param binaryTree The binary tree to check if balanced
+ * @param root The binary tree to check if balanced
*/
- public boolean isBalancedRecursive(BinaryTree binaryTree) {
+ public static boolean isBalancedRecursive(BinaryTree.Node root) {
+ if (root == null) {
+ return true;
+ }
// Create an array of length 1 to keep track of our balance
- // Default to true. We use an array so we have an efficient mutable object
+ // Default to true. We use an array, so we have an efficient mutable object
boolean[] isBalanced = new boolean[1];
isBalanced[0] = true;
- // Check for balance and return whether or not we are balanced
- isBalancedRecursive(binaryTree.root, 0, isBalanced);
+ // Check for balance and return whether we are balanced
+ isBalancedRecursive(root, 0, isBalanced);
return isBalanced[0];
}
@@ -76,11 +39,11 @@ public class CheckIfBinaryTreeBalanced {
* recursion. We effectively perform a modified post-order traversal where
* we are looking at the heights of both children of each node in the tree
*
- * @param node The current node to explore
- * @param depth The current depth of the node
+ * @param node The current node to explore
+ * @param depth The current depth of the node
* @param isBalanced The array of length 1 keeping track of our balance
*/
- private int isBalancedRecursive(BTNode node, int depth, boolean[] isBalanced) {
+ private static int isBalancedRecursive(BinaryTree.Node node, int depth, boolean[] isBalanced) {
// If the node is null, we should not explore it and the height is 0
// If the tree is already not balanced, might as well stop because we
// can't make it balanced now!
@@ -106,22 +69,26 @@ public class CheckIfBinaryTreeBalanced {
/**
* Iterative is BT balanced implementation
*/
- public boolean isBalancedIterative(BinaryTree binaryTree) {
+ public static boolean isBalancedIterative(BinaryTree.Node root) {
+ if (root == null) {
+ return true;
+ }
+
// Default that we are balanced and our algo will prove it wrong
boolean isBalanced = true;
// Create a stack for our post order traversal
- Stack