What does it mean for a binary tree to be balanced?
A binary tree is balanced if, for every node, the height difference between its left and right subtrees is at most 1.
Click to reveal answer
beginner
Why is checking balance important in binary trees?
Balanced trees keep operations like search, insert, and delete efficient, usually in O(log n) time, by avoiding long branches.
Click to reveal answer
intermediate
What is the main idea behind the efficient algorithm to check if a binary tree is balanced?
Use a bottom-up approach that returns the height of subtrees and checks balance at the same time, stopping early if imbalance is found.
Click to reveal answer
intermediate
What is the time complexity of the efficient balanced tree check algorithm?
O(n), where n is the number of nodes, because each node is visited once during the height and balance check.
Click to reveal answer
intermediate
In TypeScript, what type of value can be used to indicate an unbalanced subtree during recursion?
A special value like -1 can be returned to indicate the subtree is unbalanced, allowing early stopping.
Click to reveal answer
What is the maximum allowed height difference between left and right subtrees for a node in a balanced binary tree?
A1
B2
C0
D3
✗ Incorrect
A balanced binary tree requires the height difference to be at most 1.
Which approach is more efficient to check if a binary tree is balanced?
ABottom-up recursion returning height and balance
BTop-down checking height repeatedly
CLevel order traversal only
DInorder traversal only
✗ Incorrect
Bottom-up recursion checks balance and height in one pass, avoiding repeated height calculations.
What does a return value of -1 typically indicate in the balanced tree check algorithm?
ALeaf node found
BSubtree is balanced
CHeight of subtree
DSubtree is unbalanced
✗ Incorrect
-1 signals that the subtree is unbalanced, so recursion can stop early.
What is the time complexity of the naive top-down approach to check if a binary tree is balanced?
AO(n)
BO(n log n)
CO(n^2)
DO(log n)
✗ Incorrect
Naive approach recalculates height for each node, leading to O(n^2) time.
If a binary tree has only one node, is it balanced?
AOnly if it has children
BYes
CDepends on the node value
DNo
✗ Incorrect
A single node tree is balanced by definition.
Explain how the bottom-up recursion method checks if a binary tree is balanced.
Think about how height and balance information is passed up from children to parent.
You got /5 concepts.
Describe the difference in time complexity between the naive and efficient methods to check if a binary tree is balanced.
Consider how many times each node's height is computed.
You got /4 concepts.
Practice
(1/5)
1. What does it mean for a binary tree to be balanced?
easy
A. The height difference between left and right subtrees of every node is at most 1
B. All nodes have two children
C. The tree has the same number of nodes on left and right
D. The tree is a complete binary tree
Solution
Step 1: Understand balance condition
A balanced binary tree means no node has left and right subtree heights differing by more than 1.
Step 2: Compare options
The height difference between left and right subtrees of every node is at most 1 correctly states this condition. Other options describe different tree properties.
Final Answer:
The height difference between left and right subtrees of every node is at most 1 -> Option A
Quick Check:
Balance = height difference ≤ 1 [OK]
Hint: Balance means height difference ≤ 1 at every node [OK]
Common Mistakes:
Confusing balanced with complete tree
Thinking balance means equal number of nodes
Assuming all nodes must have two children
2. Which TypeScript function signature correctly represents a function to check if a binary tree is balanced?
easy
A. function isBalanced(root: number): boolean
B. function isBalanced(root: TreeNode | null): boolean
C. function isBalanced(root: TreeNode): number
D. function isBalanced(root: TreeNode | null): void
Solution
Step 1: Identify correct parameter and return types
The function should accept a TreeNode or null and return a boolean indicating balance.
Step 2: Match options
function isBalanced(root: TreeNode | null): boolean matches this signature. Others have wrong parameter types or return types.
Final Answer:
function isBalanced(root: TreeNode | null): boolean -> Option B
Quick Check:
Input: TreeNode|null, Output: boolean [OK]
Hint: Check input type is TreeNode|null and output is boolean [OK]
Common Mistakes:
Using number as input instead of TreeNode
Returning number instead of boolean
Using void return type
3. What will be the output of the following TypeScript code?
class TreeNode {
val: number;
left: TreeNode | null;
right: TreeNode | null;
constructor(val: number) {
this.val = val;
this.left = null;
this.right = null;
}
}
function checkHeight(node: TreeNode | null): number {
if (!node) return 0;
const leftHeight = checkHeight(node.left);
if (leftHeight === -1) return -1;
const rightHeight = checkHeight(node.right);
if (rightHeight === -1) return -1;
if (Math.abs(leftHeight - rightHeight) > 1) return -1;
return Math.max(leftHeight, rightHeight) + 1;
}
function isBalanced(root: TreeNode | null): boolean {
return checkHeight(root) !== -1;
}
const 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);
console.log(isBalanced(root));
medium
A. true
B. Runtime error
C. undefined
D. false
Solution
Step 1: Analyze tree structure
The tree is left-heavy: root.left.left.left exists but right subtree is shallow, causing imbalance.
Step 2: Trace checkHeight calls
checkHeight returns -1 when height difference > 1, so isBalanced returns false.
Final Answer:
false -> Option D
Quick Check:
Left-heavy deep subtree -> not balanced -> false [OK]
Hint: Deep left subtree with shallow right subtree means unbalanced [OK]
Common Mistakes:
Assuming tree is balanced without checking height difference
Confusing return values of checkHeight
Ignoring the -1 sentinel for imbalance
4. Identify the bug in this TypeScript function to check if a binary tree is balanced:
function isBalanced(root: TreeNode | null): boolean {
if (!root) return true;
const leftHeight = getHeight(root.left);
const rightHeight = getHeight(root.right);
if (Math.abs(leftHeight - rightHeight) > 1) return false;
return isBalanced(root.left) && isBalanced(root.right);
}
function getHeight(node: TreeNode | null): number {
if (!node) return 0;
return Math.max(getHeight(node.left), getHeight(node.right));
}
medium
A. Math.abs is used incorrectly
B. isBalanced should return true if root is null
C. getHeight does not add 1 to height, causing incorrect height calculation
D. Recursive calls in isBalanced are missing
Solution
Step 1: Review getHeight function
getHeight returns max height of children but misses adding 1 for current node.
Step 2: Understand impact on balance check
Without adding 1, height is underestimated, causing wrong balance results.
Final Answer:
getHeight does not add 1 to height, causing incorrect height calculation -> Option C
Quick Check:
Height must include current node (+1) [OK]
Hint: Always add 1 in height calculation for current node [OK]
Common Mistakes:
Forgetting to add 1 in height function
Misusing Math.abs
Missing base case for null root
5. Given a binary tree, how can you efficiently check if it is balanced without recalculating heights multiple times?
hard
A. Use a bottom-up approach returning height or -1 for imbalance in one traversal
B. Calculate height of left and right subtrees separately for each node
C. Use breadth-first traversal to check balance at each level
D. Store all node heights in a global array and compare after traversal
Solution
Step 1: Understand inefficiency of top-down approach
Calculating height separately for each node causes repeated work and O(n²) time.
Step 2: Use bottom-up approach
Return height if balanced, else -1 for imbalance, stopping early and using one traversal.
Final Answer:
Use a bottom-up approach returning height or -1 for imbalance in one traversal -> Option A
Quick Check:
Bottom-up single pass = efficient balance check [OK]
Hint: Return height or -1 in one pass to avoid repeated height calls [OK]
Common Mistakes:
Recalculating heights multiple times causing slow code
Using breadth-first traversal which doesn't help balance check
Storing heights globally without efficient update
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.