📖 Scenario: You are building a simple binary tree to organize numbers. Each node can have up to two children: left and right. This structure helps in searching and sorting numbers efficiently.
🎯 Goal: Create a binary tree manually by defining nodes and linking them. Then print the tree nodes in a simple order to see the structure.
📋 What You'll Learn
Define a struct called Node with an integer value and two pointers left and right to Node.
Create nodes with exact values: 10, 5, 15, 3, 7.
Link nodes to form the binary tree: 10 as root, 5 as left child, 15 as right child, 3 as left child of 5, 7 as right child of 5.
Write a function to print the tree nodes in pre-order (root, left, right).
Print the values of the tree nodes in pre-order.
💡 Why This Matters
🌍 Real World
Binary trees are used in many applications like organizing data, searching quickly, and managing hierarchical information such as file systems or decision trees.
💼 Career
Understanding how to create and traverse binary trees is fundamental for software developers working with data structures, algorithms, and system design.
Progress0 / 4 steps
1
Define the Node struct and create nodes
Define a struct called Node with an integer field value and two pointer fields left and right of type *Node. Then create five variables called root, node5, node15, node3, and node7 of type Node with values 10, 5, 15, 3, and 7 respectively.
DSA Go
Hint
Start by defining the Node struct with the fields. Then create variables for each node with the given values.
2
Link nodes to form the binary tree
Link the nodes to form the binary tree by setting root.left to the address of node5, root.right to the address of node15, node5.left to the address of node3, and node5.right to the address of node7.
DSA Go
Hint
Use the & operator to get the address of the nodes and assign them to the left and right pointers.
3
Write a function to print the tree in pre-order
Write a function called preOrderPrint that takes a pointer to Node called node. It should print the value of node, then recursively call itself on node.left and node.right if they are not nil.
DSA Go
Hint
Check if the node is nil to stop recursion. Print the node's value, then call the function on left and right children.
4
Print the tree nodes in pre-order
Call the function preOrderPrint with the address of root in main. Then print a newline using fmt.Println().
DSA Go
Hint
Call preOrderPrint(&root) to start printing from the root node. Use fmt.Println() to add a newline after printing.
Practice
(1/5)
1. What is the first step to manually create a binary tree in Go?
easy
A. Define a struct type for the tree node with data and pointers
B. Write a function to traverse the tree
C. Initialize an empty slice
D. Import the fmt package
Solution
Step 1: Define the node structure
To create a binary tree manually, you first need a struct that represents each node with fields for data and pointers to left and right children.
Step 2: Use this struct to create nodes and link them
After defining the struct, you can create nodes and connect them to form the tree.
Final Answer:
Define a struct type for the tree node with data and pointers -> Option A
Quick Check:
Node struct definition = A [OK]
Hint: Start by defining the node struct with left and right pointers [OK]
Common Mistakes:
Trying to create nodes without defining the struct first
Confusing slices with tree nodes
Skipping pointer fields in the struct
2. Which of the following is the correct syntax to declare a binary tree node struct in Go?
easy
A. class Node { int data; Node left; Node right }
B. struct Node { int data; Node* left; Node* right }
C. Node := struct { data int; left Node; right Node }
D. type Node struct { data int; left *Node; right *Node }
Solution
Step 1: Understand Go struct syntax
In Go, structs are declared with the keyword 'type' followed by the struct name and fields inside curly braces. Pointers use '*'.
Step 2: Match the correct syntax
type Node struct { data int; left *Node; right *Node } correctly uses 'type Node struct { data int; left *Node; right *Node }' which is valid Go syntax for a binary tree node.
Final Answer:
type Node struct { data int; left *Node; right *Node } -> Option D
Quick Check:
Go struct with pointers = C [OK]
Hint: Remember Go uses 'type' and '*' for pointers in structs [OK]
Common Mistakes:
Using C/C++ or Java syntax instead of Go
Missing the '*' for pointer fields
Using := inside type declaration
3. What will be the output of this Go code that manually creates a binary tree and prints the root node's data?
package main
import "fmt"
type Node struct {
data int
left *Node
right *Node
}
func main() {
root := &Node{data: 10}
root.left = &Node{data: 5}
root.right = &Node{data: 15}
fmt.Println(root.data)
}
medium
A. 10
B. 5
C. 15
D. Compilation error
Solution
Step 1: Understand node creation
The root node is created with data 10, and its left and right children are assigned 5 and 15 respectively.
Step 2: Identify printed value
The code prints root.data, which is 10.
Final Answer:
10 -> Option A
Quick Check:
root.data = 10 [OK]
Hint: Print root.data to get the root node's value [OK]
Common Mistakes:
Printing left or right data instead of root
Confusing pointer dereferencing syntax
Expecting traversal output instead of root data
4. Identify the error in this Go code that tries to create a binary tree node:
type Node struct {
data int
left *Node
right *Node
}
func main() {
root := Node{data: 10}
root.left = Node{data: 5}
root.right = Node{data: 15}
}
medium
A. Missing semicolon after struct definition
B. Data field should be string, not int
C. Cannot assign struct to pointer field without & operator
D. No error, code is correct
Solution
Step 1: Check pointer assignments
The left and right fields are pointers (*Node), but the code assigns Node structs directly without using & to get their address.
Step 2: Correct pointer assignment
To fix, use &Node{data: 5} and &Node{data: 15} to assign pointers.
Final Answer:
Cannot assign struct to pointer field without & operator -> Option C
Quick Check:
Pointer fields need & before struct [OK]
Hint: Use & to assign address to pointer fields [OK]
Common Mistakes:
Assigning struct value directly to pointer field
Ignoring pointer type in struct fields
Assuming Go auto-converts struct to pointer
5. Given the following Go code to create a binary tree manually, what is the correct way to add a new node with value 7 as the left child of the node with value 5?
type Node struct {
data int
left *Node
right *Node
}
func main() {
root := &Node{data: 10}
root.left = &Node{data: 5}
root.right = &Node{data: 15}
// Add new node here
}
hard
A. root.right.right = &Node{data: 7}
B. root.left.left = &Node{data: 7}
C. root.right.left = &Node{data: 7}
D. root.left.right = &Node{data: 7}
Solution
Step 1: Locate node with value 5
The node with value 5 is root.left.
Step 2: Add new node as left child of node 5
To add a left child, assign root.left.left = &Node{data: 7}.
Final Answer:
root.left.left = &Node{data: 7} -> Option B
Quick Check:
Left child of node 5 = D [OK]
Hint: Use root.left.left to add left child to node 5 [OK]
Common Mistakes:
Adding new node to wrong child pointer
Confusing left and right pointers
Assigning to root.right instead of root.left
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.