Bird
Raised Fist0
DSA Goprogramming~30 mins

Tree Terminology Root Leaf Height Depth Level in DSA Go - Build from Scratch

Choose your learning style10 modes available
Understanding Tree Terminology: Root, Leaf, Height, Depth, Level
📖 Scenario: Imagine you are organizing a family tree. Each person is a node. The oldest ancestor is the root. People with no children are leaves. You want to understand how far each person is from the oldest ancestor and how tall the family tree is.
🎯 Goal: You will build a simple tree structure in Go and learn to identify the root, leaves, height, depth, and level of nodes.
📋 What You'll Learn
Create a tree node struct with a value and children
Create a root node with specific children
Add a variable to track the height of the tree
Write a function to calculate the depth of a node
Print the root value, leaf nodes, tree height, and depth of a specific node
💡 Why This Matters
🌍 Real World
Trees are used to organize data hierarchically, like family trees, file systems, or company structures.
💼 Career
Understanding tree terminology and traversal is essential for software engineers working with data structures, databases, and algorithms.
Progress0 / 4 steps
1
Create the Tree Structure with Root and Children
Create a struct called Node with a field value of type string and a field children which is a slice of pointers to Node. Then create a variable root of type *Node with value set to "Grandparent" and two children nodes with values "Parent1" and "Parent2".
DSA Go
Hint

Define the struct first, then create the root node with two children inside the main function.

2
Add More Children and a Height Variable
Add two children to the Parent1 node with values "Child1" and "Child2". Then create an integer variable called height and set it to 3 representing the height of the tree.
DSA Go
Hint

Find the Parent1 node inside the root's children and add children to it. Then create the height variable.

3
Write a Function to Calculate Depth of a Node
Write a function called depth that takes a pointer to Node, a target string, and a current int depth. It returns the depth of the node with the target value or -1 if not found. Use recursion to search children. Then call depth(root, "Child2", 0) and store the result in a variable called child2Depth.
DSA Go
Hint

Use recursion to check if the current node matches the target. If not, check each child increasing the depth count.

4
Print Root, Leaves, Height, and Depth of Child2
Print the root node's value with "Root: " prefix. Then print all leaf nodes (nodes with no children) with "Leaf: " prefix, one per line. Print the tree height with "Height: " prefix. Finally, print the depth of "Child2" with "Depth of Child2: " prefix. Use a helper function printLeaves that takes a *Node and prints all leaves.
DSA Go
Hint

Use fmt.Println to print the root value, height, and depth. Use recursion in printLeaves to print all leaves.

Practice

(1/5)
1. In a tree data structure, which node is called the root?
easy
A. The topmost node with no parent
B. A node with no children
C. Any node at the lowest level
D. A node with exactly two children

Solution

  1. Step 1: Understand the root node definition

    The root node is the starting point of a tree and has no parent node above it.
  2. Step 2: Differentiate root from other nodes

    Leaf nodes have no children, but root specifically has no parent. Lowest level nodes are leaves or internal nodes, not necessarily root.
  3. Final Answer:

    The topmost node with no parent -> Option A
  4. Quick Check:

    Root = topmost node with no parent [OK]
Hint: Root is always the top node without a parent [OK]
Common Mistakes:
  • Confusing root with leaf node
  • Thinking root must have children
  • Assuming root is at the lowest level
2. Which of the following is the correct way to declare a tree node struct in Go with integer data and pointers to left and right children?
easy
A. type Node struct { data int, left &Node, right &Node }
B. type Node struct { data int, left *Node, right *Node }
C. type Node struct { data int, left Node, right Node }
D. type Node struct { data int, left Node*, right Node* }

Solution

  1. Step 1: Recall Go pointer syntax

    In Go, pointers are declared with * before the type, e.g., *Node.
  2. Step 2: Check each option's pointer usage

    type Node struct { data int, left *Node, right *Node } uses *Node correctly. type Node struct { data int, left Node, right Node } uses Node (value, not pointer). type Node struct { data int, left &Node, right &Node } uses &Node which is invalid syntax. type Node struct { data int, left Node*, right Node* } uses Node* which is invalid in Go.
  3. Final Answer:

    type Node struct { data int, left *Node, right *Node } -> Option B
  4. Quick Check:

    Pointer syntax in Go = *Type [OK]
Hint: Use *Type for pointers in Go structs [OK]
Common Mistakes:
  • Using value type instead of pointer for children
  • Using &Type or Type* which are invalid in Go
  • Using semicolons instead of commas in struct fields
3. Given the following tree structure in Go, what is the depth of node with value 5?
type Node struct {
  data  int
  left  *Node
  right *Node
}

root := &Node{data: 1}
root.left = &Node{data: 2}
root.right = &Node{data: 3}
root.left.left = &Node{data: 4}
root.left.right = &Node{data: 5}
medium
A. 2
B. 1
C. 3
D. 4

Solution

  1. Step 1: Understand depth definition

    Depth of a node is the number of edges from the root to that node.
  2. Step 2: Trace path from root to node 5

    Path: 1 (root) -> 2 -> 5. Number of edges = 2.
  3. Final Answer:

    2 -> Option A
  4. Quick Check:

    Depth = edges from root = 2 [OK]
Hint: Count edges from root to node for depth [OK]
Common Mistakes:
  • Counting nodes instead of edges
  • Confusing depth with height
  • Miscounting path length
4. Consider this Go code snippet for a binary tree node:
type Node struct {
  data  int
  left  *Node
  right *Node
}

func isLeaf(n *Node) bool {
  return n.left == nil && n.right == nil
}

root := &Node{data: 10}
root.left = &Node{data: 20}
root.right = &Node{data: 30}
root.left.left = &Node{data: 40}

fmt.Println(isLeaf(root.left))
What is the output and why?
medium
A. true
B. Runtime panic
C. Compilation error
D. false

Solution

  1. Step 1: Understand isLeaf function

    It returns true if both left and right children are nil (no children).
  2. Step 2: Check root.left node children

    root.left has left child (40) but no right child, so left != nil, right == nil.
  3. Step 3: Evaluate isLeaf(root.left)

    Since left is not nil, isLeaf returns false.
  4. Final Answer:

    false -> Option D
  5. Quick Check:

    Leaf = no children, root.left has left child [OK]
Hint: Leaf nodes have no children; check both left and right nil [OK]
Common Mistakes:
  • Assuming node with one child is leaf
  • Confusing nil checks causing panic
  • Expecting true without checking both children
5. You have a binary tree where the root is at level 0. If a node is at level 3, what is its height assuming the tree height is 5? Also, which node is at level 0? Choose the correct pair of answers.
hard
A. Height = 5; Root node is at level 0
B. Height = 3; Leaf node is at level 0
C. Height = 2; Root node is at level 0
D. Height = 2; Leaf node is at level 0

Solution

  1. Step 1: Calculate height of node at level 3

    Height = total tree height - node level = 5 - 3 = 2.
  2. Step 2: Identify node at level 0

    By definition, root node is at level 0.
  3. Final Answer:

    Height = 2; Root node is at level 0 -> Option C
  4. Quick Check:

    Height = 5 - 3 = 2; Root at level 0 [OK]
Hint: Height = tree height - level; root always level 0 [OK]
Common Mistakes:
  • Confusing height with level
  • Assuming leaf node at level 0
  • Calculating height as level number
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