Bird
Raised Fist0
DSA Goprogramming~10 mins

Height of Binary Tree in DSA Go - Execution Trace

Choose your learning style10 modes available
Concept Flow - Height of Binary Tree
Start at root node
↓
Is node null?
Yes→Return 0
No↓
Find height of left subtree
↓
Find height of right subtree
↓
Compare left and right heights
↓
Height = max(left, right) + 1
↓
Return height
Start from the root, recursively find heights of left and right subtrees, then return the larger height plus one.
Execution Sample
DSA Go
func height(node *Node) int {
  if node == nil {
    return 0
  }
  leftHeight := height(node.Left)
  rightHeight := height(node.Right)
  if leftHeight > rightHeight {
    return leftHeight + 1
  }
  return rightHeight + 1
}
This function calculates the height of a binary tree by recursively checking left and right subtree heights.
Execution Table
StepOperationNode VisitedLeft HeightRight HeightHeight ComputedTree State
1Start at root10---10 / \ 5 15 / \ \ 3 7 20
2Go left5---Subtree rooted at 5
3Go left3---Leaf node 3
4Node 3 is leaf30013
5Go right7---Leaf node 7
6Node 7 is leaf70017
7Compute height at 551125 / \ 3 7
8Go right15---Subtree rooted at 15
9Go leftnil---Empty subtree
10Left height at 15nil0---
11Go right20---Leaf node 20
12Node 20 is leaf2000120
13Compute height at 151501215 \ 20
14Compute height at root 101022310 / \ 5 15 / \ \ 3 7 20
15Return final height---3Complete tree height is 3
💡 All nodes visited, heights computed bottom-up, final height returned.
Variable Tracker
VariableStartAfter Step 4After Step 6After Step 7After Step 12After Step 13After Step 14Final
node10375201510-
leftHeight-001002-
rightHeight-001012-
height-1121233
Key Moments - 3 Insights
Why do we return 0 when the node is nil?
Because a nil node means no tree exists there, so its height is 0. This is shown in steps 3, 9, and 10 where nil nodes return 0 height.
Why do we add 1 after taking max of left and right heights?
We add 1 to count the current node itself. Steps 7, 13, and 14 show height computed as max(leftHeight, rightHeight) + 1.
How does recursion ensure all nodes are visited?
The function calls itself on left and right children until it reaches nil nodes (steps 3, 9). This bottom-up approach ensures every node's height is computed.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 7, what is the height computed for node 5?
A1
B2
C3
D0
💡 Hint
Check the 'Height Computed' column at step 7 in the execution table.
At which step does the function return height for the leaf node 20?
AStep 6
BStep 12
CStep 14
DStep 4
💡 Hint
Look for the step where node 20 is visited and height is computed in the execution table.
If the right subtree of node 15 was empty, what would be the height computed at node 15?
A1
B0
C2
D3
💡 Hint
Refer to steps 10 and 13 where left or right subtree heights are 0 and how height is computed.
Concept Snapshot
Height of Binary Tree:
- Base case: nil node height = 0
- Recursively find left and right subtree heights
- Height = max(leftHeight, rightHeight) + 1
- Counts edges from root to deepest leaf
- Uses post-order traversal (bottom-up)
Full Transcript
To find the height of a binary tree, start at the root node. If the node is nil, return 0 because there is no tree there. Otherwise, recursively find the height of the left subtree and the right subtree. Then, take the maximum of these two heights and add 1 to count the current node. This process continues until all nodes are visited and their heights computed. The final returned value is the height of the entire tree. This method uses a bottom-up approach, visiting leaf nodes first and moving up to the root.

Practice

(1/5)
1. What does the height of a binary tree represent?
easy
A. The number of children of the root node
B. The total number of nodes in the tree
C. The number of leaf nodes in the tree
D. The number of edges on the longest path from root to a leaf

Solution

  1. Step 1: Understand the definition of height in a binary tree

    The height is the longest path from the root node down to the farthest leaf node, counted by edges.
  2. Step 2: Compare options with the definition

    Only The number of edges on the longest path from root to a leaf correctly describes the height as the number of edges on the longest root-to-leaf path.
  3. Final Answer:

    The number of edges on the longest path from root to a leaf -> Option D
  4. Quick Check:

    Height = longest root-to-leaf edges [OK]
Hint: Height counts edges, not nodes, from root to deepest leaf [OK]
Common Mistakes:
  • Confusing height with total nodes
  • Counting nodes instead of edges
  • Thinking height is number of leaves
2. Which Go function signature correctly defines a recursive function to find the height of a binary tree node?
easy
A. func height(root Node) string
B. func height(root *Node) int
C. func height(root *Node) bool
D. func height(root Node) float64

Solution

  1. Step 1: Identify correct parameter and return types for height function

    The function should accept a pointer to a Node and return an integer representing height.
  2. Step 2: Match options with correct signature

    func height(root *Node) int matches: func height(root *Node) int. Others have wrong parameter types or return types.
  3. Final Answer:

    func height(root *Node) int -> Option B
  4. Quick Check:

    Pointer input and int output for height [OK]
Hint: Height returns int; input is pointer to Node [OK]
Common Mistakes:
  • Using value instead of pointer for root
  • Returning wrong data type like bool or string
  • Incorrect function parameter types
3. What is the output of this Go code snippet that calculates the height of a binary tree?
package main

import "fmt"

type Node struct {
    left, right *Node
}

func height(root *Node) int {
    if root == nil {
        return 0
    }
    leftHeight := height(root.left)
    rightHeight := height(root.right)
    if leftHeight > rightHeight {
        return leftHeight + 1
    }
    return rightHeight + 1
}

func main() {
    root := &Node{
        left: &Node{},
        right: &Node{
            right: &Node{},
        },
    }
    fmt.Println(height(root))
}
medium
A. 3
B. 2
C. 4
D. 1

Solution

  1. Step 1: Analyze the tree structure

    The root has left child (leaf) and right child with its own right child (leaf). The longest path is root -> right -> right, which has 3 nodes and 2 edges.
  2. Step 2: Calculate height as edges + 1

    The function returns 1 + max height of children. The longest path has 2 edges, so height = 3.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    Height counts edges + 1 for nodes [OK]
Hint: Count longest path edges + 1 for height [OK]
Common Mistakes:
  • Counting nodes instead of edges
  • Ignoring nil child nodes
  • Confusing left and right subtree heights
4. Identify the bug in this Go function that calculates the height of a binary tree:
func height(root *Node) int {
    if root == nil {
        return -1
    }
    leftHeight := height(root.left)
    rightHeight := height(root.right)
    if leftHeight > rightHeight {
        return leftHeight + 1
    }
    return rightHeight + 1
}
medium
A. Returning -1 for nil node causes incorrect height calculation
B. Missing base case for leaf nodes
C. Using pointers incorrectly for root
D. Not handling empty tree separately

Solution

  1. Step 1: Check base case return value

    The function returns -1 for nil nodes, which causes height to be off by one compared to standard definition.
  2. Step 2: Understand correct base case for height

    Height of empty tree should be 0 or 0 edges; returning -1 leads to negative heights and incorrect results.
  3. Final Answer:

    Returning -1 for nil node causes incorrect height calculation -> Option A
  4. Quick Check:

    Base case should return 0 for nil [OK]
Hint: Base case for nil must return 0, not -1 [OK]
Common Mistakes:
  • Returning -1 instead of 0 for nil
  • Confusing base case with leaf node
  • Not adding 1 after recursive calls
5. Given a binary tree where each node stores an integer, write a recursive Go function to find the height of the tree and also return the sum of all node values at the deepest level. Which approach correctly combines these tasks?
hard
A. Use iterative BFS to find height and sum nodes at last level in one pass
B. Calculate height first, then traverse tree again to sum deepest level nodes separately
C. Use a recursive function that returns both height and sum at deepest level by comparing left and right subtree results
D. Use recursion to sum all nodes and ignore height calculation

Solution

  1. Step 1: Understand combined task requirements

    We need height and sum of nodes at deepest level in one function efficiently.
  2. Step 2: Evaluate approaches

    Use a recursive function that returns both height and sum at deepest level by comparing left and right subtree results uses recursion returning height and sum together, avoiding multiple traversals.
  3. Step 3: Compare other options

    Calculate height first, then traverse tree again to sum deepest level nodes separately does two traversals, less efficient. Use iterative BFS to find height and sum nodes at last level in one pass is valid but iterative BFS is not recursive. Use recursion to sum all nodes and ignore height calculation ignores height, so incomplete.
  4. Final Answer:

    Use a recursive function that returns both height and sum at deepest level by comparing left and right subtree results -> Option C
  5. Quick Check:

    Combine height and sum in one recursive pass [OK]
Hint: Return height and sum together recursively to avoid extra traversal [OK]
Common Mistakes:
  • Doing two separate traversals
  • Ignoring sum at deepest level
  • Using iterative approach when recursion asked
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard