What if you could instantly know if your tree is balanced without counting every branch?
Why Check if Binary Tree is Balanced in DSA Java?
Imagine you have a family tree drawn on paper. You want to quickly see if the tree is balanced, meaning no side is too heavy or too light compared to the other. Doing this by eye is hard and confusing when the tree is big.
Manually checking each branch's height and comparing takes a lot of time and mistakes happen easily. You might miss a branch or miscount levels, leading to wrong conclusions about balance.
Using a program to check balance automatically looks at each branch's height and ensures the difference is never more than one. This saves time and avoids errors, giving a clear yes or no answer quickly.
int height(Node node) {
if (node == null) return 0;
int leftHeight = height(node.left);
int rightHeight = height(node.right);
return Math.max(leftHeight, rightHeight) + 1;
}
boolean isBalanced(Node node) {
if (node == null) return true;
int leftHeight = height(node.left);
int rightHeight = height(node.right);
if (Math.abs(leftHeight - rightHeight) > 1) return false;
return isBalanced(node.left) && isBalanced(node.right);
}int checkHeight(Node node) {
if (node == null) return 0;
int leftHeight = checkHeight(node.left);
if (leftHeight == -1) return -1;
int rightHeight = checkHeight(node.right);
if (rightHeight == -1) return -1;
if (Math.abs(leftHeight - rightHeight) > 1) return -1;
return Math.max(leftHeight, rightHeight) + 1;
}
boolean isBalanced(Node root) {
return checkHeight(root) != -1;
}This lets you quickly and reliably know if a tree is balanced, which is key for efficient searching and data handling.
When building a phone contact list app, checking if the contact tree is balanced helps keep searches fast, so you find contacts quickly without delays.
Manual height checks are slow and error-prone.
Using a single pass with early stopping improves speed and accuracy.
Balanced trees keep data operations efficient and fast.
Practice
Solution
Step 1: Understand balance condition
A balanced binary tree means the height difference between left and right subtrees of every node is at most 1.Step 2: Compare other options
Options A, B, and C describe different tree properties but not the balance condition.Final Answer:
The height difference between left and right subtrees of every node is at most 1 -> Option AQuick Check:
Balance means height difference ≤ 1 [OK]
- Confusing balanced with complete tree
- Thinking balance means equal number of nodes
- Assuming all nodes must have two children
Solution
Step 1: Check Java method syntax
Correct Java method signature includes access modifier, return type, method name, and parameters: public boolean isBalanced(TreeNode root)Step 2: Identify incorrect syntax
Options A, C, and D have invalid order or keywords not used in Java method declarations.Final Answer:
public boolean isBalanced(TreeNode root) -> Option BQuick Check:
Java method syntax: access returnType name(params) [OK]
- Mixing return type and void
- Wrong keyword order
- Missing access modifier
class TreeNode {
int val;
TreeNode left, right;
TreeNode(int x) { val = x; }
}
public class Solution {
public boolean isBalanced(TreeNode root) {
if (root == null) return true;
int leftHeight = height(root.left);
int rightHeight = height(root.right);
if (Math.abs(leftHeight - rightHeight) > 1) return false;
return isBalanced(root.left) && isBalanced(root.right);
}
private int height(TreeNode node) {
if (node == null) return 0;
return 1 + Math.max(height(node.left), height(node.right));
}
public static void main(String[] args) {
TreeNode root = new TreeNode(1);
root.left = new TreeNode(2);
root.right = new TreeNode(3);
root.left.left = new TreeNode(4);
root.left.left.left = new TreeNode(5);
Solution sol = new Solution();
System.out.println(sol.isBalanced(root));
}
}Solution
Step 1: Calculate subtree heights
Left subtree of root has height 3 (nodes 2 -> 4 -> 5), right subtree has height 1 (node 3). Difference is 2 > 1.Step 2: Check balance condition
Since height difference > 1 at root, isBalanced returns false.Final Answer:
false -> Option AQuick Check:
Height difference > 1 means unbalanced = false [OK]
- Ignoring height difference > 1
- Assuming tree is balanced by default
- Confusing height with node count
public boolean isBalanced(TreeNode root) {
if (root == null) return true;
int leftHeight = height(root.left);
int rightHeight = height(root.right);
if (Math.abs(leftHeight - rightHeight) > 1) return false;
return isBalanced(root.left) || isBalanced(root.right);
}
private int height(TreeNode node) {
if (node == null) return 0;
return 1 + Math.max(height(node.left), height(node.right));
}Solution
Step 1: Analyze recursive calls
The code uses || (OR) to combine left and right subtree balance checks, which returns true if either subtree is balanced.Step 2: Correct logic for balance
Both left and right subtrees must be balanced, so && (AND) should be used instead of ||.Final Answer:
Using || instead of && in recursive call -> Option CQuick Check:
Balance requires both subtrees balanced: use && [OK]
- Using || instead of &&
- Forgetting base case
- Miscomputing height
Solution
Step 1: Identify inefficiency in naive approach
Naive method calculates height repeatedly for subtrees, causing extra work.Step 2: Use combined recursive function
Return height if subtree is balanced, else return -1 to indicate imbalance, avoiding repeated height calls.Final Answer:
Calculate height and balance in one recursive function returning a special value -> Option DQuick Check:
Combine height and balance check to optimize [OK]
- Recalculating height multiple times
- Using level order traversal which doesn't help balance check
- Checking balance only at root
Ready to prove it?
Pass the test and this pattern moves unknown
