Challenge - 5 Problems
Diameter Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate2:00remaining
Output of Diameter Calculation for a Simple Tree
What is the output of the following Go code that calculates the diameter of a binary tree?
DSA Go
package main import "fmt" type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func diameterOfBinaryTree(root *TreeNode) int { maxDiameter := 0 var depth func(node *TreeNode) int depth = func(node *TreeNode) int { if node == nil { return 0 } left := depth(node.Left) right := depth(node.Right) if left+right > maxDiameter { maxDiameter = left + right } if left > right { return left + 1 } return right + 1 } depth(root) return maxDiameter } func main() { root := &TreeNode{Val: 1} root.Left = &TreeNode{Val: 2} root.Right = &TreeNode{Val: 3} root.Left.Left = &TreeNode{Val: 4} root.Left.Right = &TreeNode{Val: 5} fmt.Println(diameterOfBinaryTree(root)) }
Attempts:
2 left
💡 Hint
Think about the longest path between any two nodes in the tree.
✗ Incorrect
The diameter is the longest path between two nodes. Here, the longest path goes through nodes 4 -> 2 -> 1 -> 3 or 5 -> 2 -> 1 -> 3, which has length 3 edges.
🧠 Conceptual
intermediate1:30remaining
Understanding Diameter Definition
Which of the following best describes the diameter of a binary tree?
Attempts:
2 left
💡 Hint
Diameter counts edges, not nodes.
✗ Incorrect
Diameter is defined as the number of edges on the longest path between any two nodes, not the number of nodes or height.
🔧 Debug
advanced2:00remaining
Identify the Error in Diameter Calculation
What error will occur when running this Go code to calculate the diameter of a binary tree?
DSA Go
package main import "fmt" type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func diameterOfBinaryTree(root *TreeNode) int { maxDiameter := 0 var depth func(node *TreeNode) int depth = func(node *TreeNode) int { if node == nil { return 0 } left := depth(node.Left) right := depth(node.Right) if left+right > maxDiameter { maxDiameter = left + right } return max(left, right) + 1 } depth(root) return maxDiameter } func max(a, b int) int { if a > b { return a } return b } func main() { root := &TreeNode{Val: 1} root.Left = &TreeNode{Val: 2} root.Right = &TreeNode{Val: 3} fmt.Println(diameterOfBinaryTree(root)) }
Attempts:
2 left
💡 Hint
Check if the max function is defined and used correctly.
✗ Incorrect
The max function is defined and used correctly. The diameter for this tree is 2 edges (path 2 -> 1 -> 3).
🚀 Application
advanced2:00remaining
Diameter of Unbalanced Binary Tree
Given the following unbalanced binary tree, what is the diameter?
DSA Go
package main import "fmt" type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func diameterOfBinaryTree(root *TreeNode) int { maxDiameter := 0 var depth func(node *TreeNode) int depth = func(node *TreeNode) int { if node == nil { return 0 } left := depth(node.Left) right := depth(node.Right) if left+right > maxDiameter { maxDiameter = left + right } if left > right { return left + 1 } return right + 1 } depth(root) return maxDiameter } func main() { root := &TreeNode{Val: 1} root.Left = &TreeNode{Val: 2} root.Left.Left = &TreeNode{Val: 3} root.Left.Left.Left = &TreeNode{Val: 4} root.Right = &TreeNode{Val: 5} fmt.Println(diameterOfBinaryTree(root)) }
Attempts:
2 left
💡 Hint
Consider the longest path between two nodes, which may not pass through the root.
✗ Incorrect
The longest path is from node 4 to node 5 (4 -> 3 -> 2 -> 1 -> 5), which has 4 edges. The code correctly computes it as 4 (left depth from root = 3, right = 1, 3 + 1 = 4).
🧠 Conceptual
expert1:30remaining
Effect of Diameter Calculation on Tree Traversal Complexity
What is the time complexity of calculating the diameter of a binary tree using the depth-first search approach shown in the code examples?
Attempts:
2 left
💡 Hint
Each node is visited once in the depth-first search.
✗ Incorrect
The algorithm visits each node once, calculating depth and updating diameter, so the time complexity is linear O(n).