Bird
Raised Fist0
DSA Goprogramming~10 mins

Why BST Over Plain Binary Tree in DSA Go - Why It Works

Choose your learning style10 modes available
Concept Flow - Why BST Over Plain Binary Tree
Start with Plain Binary Tree
↓
Insert nodes anywhere
↓
No order guarantees
↓
Search: Need to check all nodes
↓
Time: O(n) worst case
↓
Switch to Binary Search Tree (BST)
↓
Insert nodes with order: left < root < right
↓
Search: Compare and go left or right
↓
Time: O(log n) average case
↓
More efficient search, insert, delete
Shows how a plain binary tree inserts nodes without order causing slow search, while BST keeps order for faster search.
Execution Sample
DSA Go
type Node struct {
  val int
  left, right *Node
}

// Insert in BST
func insert(root *Node, val int) *Node {
  if root == nil {
    return &Node{val: val}
  }
  if val < root.val {
    root.left = insert(root.left, val)
  } else {
    root.right = insert(root.right, val)
  }
  return root
}
Inserts values into a BST maintaining order for efficient search.
Execution Table
StepOperationNodes in TreePointer ChangesVisual State
1Insert 10 (Plain Binary Tree)10root = new Node(10)10
2Insert 5 (Plain Binary Tree)10, 5root.left = new Node(5) 10 / 5
3Insert 15 (Plain Binary Tree)10, 5, 15root.right = new Node(15) 10 / \ 5 15
4Search 15 (Plain Binary Tree)10, 5, 15Traverse all nodesSearch checks 10 -> 5 -> 15
5Insert 10 (BST)10root = new Node(10)10
6Insert 5 (BST)10, 5root.left = insert(root.left, 5) 10 / 5
7Insert 15 (BST)10, 5, 15root.right = insert(root.right, 15) 10 / \ 5 15
8Search 15 (BST)10, 5, 15Compare 15 > 10, go rightSearch path: 10 -> 15
9Search 5 (BST)10, 5, 15Compare 5 < 10, go leftSearch path: 10 -> 5
10Search 20 (BST)10, 5, 15Compare 20 > 10, go right; 20 > 15, go right (nil)Search path: 10 -> 15 -> nil (not found)
💡 Search ends when node found or nil reached; BST search faster due to ordered traversal
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 7After Step 10
rootnilNode(10)Node(10)Node(10)Node(10)
root.leftnilNode(5)Node(5)Node(5)Node(5)
root.rightnilnilNode(15)Node(15)Node(15)
search_path[][][][][10, 15, nil]
Key Moments - 3 Insights
Why does searching in a plain binary tree take longer than in a BST?
Because in a plain binary tree, nodes are inserted without order, so search must check many or all nodes (see execution_table step 4). In BST, search uses order to skip half the tree each step (steps 8-10).
How does BST insertion keep the tree ordered?
BST inserts nodes by comparing values and placing smaller ones to the left and larger to the right (see execution_table steps 6 and 7). This keeps the tree sorted for efficient search.
What happens if the searched value is not in the BST?
Search goes down the tree comparing values until it reaches a nil pointer (no node), meaning value not found (see execution_table step 10).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 4, how many nodes does the search check in the plain binary tree?
A1 node
B3 nodes
C2 nodes
D0 nodes
💡 Hint
Check the 'Visual State' column at step 4 showing search path through 10, 5, and 15
At which step does the BST insert the node with value 15?
AStep 6
BStep 3
CStep 7
DStep 2
💡 Hint
Look at the 'Operation' column for BST insertions after step 5
If we insert nodes in random order in a BST, what is the expected search time complexity?
AO(log n)
BO(1)
CO(n)
DO(n log n)
💡 Hint
Refer to the concept_flow showing BST search time as O(log n) average case
Concept Snapshot
Plain Binary Tree inserts nodes anywhere without order.
Search may check all nodes: O(n) time.
BST inserts nodes with order: left < root < right.
Search uses order to skip half tree each step.
BST average search, insert, delete: O(log n) time.
BST is more efficient for search operations.
Full Transcript
A plain binary tree inserts nodes without any order, so searching for a value may require checking many or all nodes, resulting in O(n) time complexity. A binary search tree (BST) inserts nodes by comparing values and placing smaller values to the left and larger to the right, maintaining order. This order allows searching by comparing and moving left or right, skipping half the tree each step, leading to O(log n) average time complexity. The execution table shows how nodes are inserted and searched in both trees, highlighting the efficiency of BST over plain binary tree. Key moments clarify why BST is faster and how insertion maintains order. The visual quiz tests understanding of these steps and concepts.

Practice

(1/5)
1. Why is a Binary Search Tree (BST) preferred over a plain Binary Tree for searching elements?
easy
A. Because BST uses less memory than a plain Binary Tree
B. Because BST keeps elements in a sorted order allowing faster search
C. Because BST nodes can have more than two children
D. Because BST does not require pointers to child nodes

Solution

  1. Step 1: Understand the structure difference

    A plain Binary Tree has no order among nodes, while BST keeps nodes sorted so left child is smaller and right child is larger.
  2. Step 2: Analyze search efficiency

    Because BST is sorted, searching can skip half the tree at each step, making search faster than in a plain Binary Tree.
  3. Final Answer:

    Because BST keeps elements in a sorted order allowing faster search -> Option B
  4. Quick Check:

    Sorted structure = faster search [OK]
Hint: BST is sorted, so search is faster than plain tree [OK]
Common Mistakes:
  • Thinking BST uses less memory
  • Confusing number of children per node
  • Believing BST does not use pointers
2. Which of the following is the correct way to declare a node struct for a BST in Go?
easy
A. type Node struct { value int; left *Node; right *Node }
B. type Node struct { value int; left Node; right Node }
C. type Node struct { value int; left *int; right *int }
D. type Node struct { value int; left interface{}; right interface{} }

Solution

  1. Step 1: Understand pointer usage in Go structs

    BST nodes must point to child nodes, so left and right should be pointers to Node type.
  2. Step 2: Check each option

    type Node struct { value int; left *Node; right *Node } uses *Node pointers correctly. type Node struct { value int; left Node; right Node } uses Node directly, causing infinite size. type Node struct { value int; left *int; right *int } uses *int which is wrong type. type Node struct { value int; left interface{}; right interface{} } uses interface{} which is too generic and not typical for BST.
  3. Final Answer:

    type Node struct { value int; left *Node; right *Node } -> Option A
  4. Quick Check:

    Pointers to Node = correct struct [OK]
Hint: BST nodes use pointers to child nodes in Go [OK]
Common Mistakes:
  • Using non-pointer fields causing infinite struct size
  • Using wrong pointer types like *int
  • Using interface{} instead of concrete types
3. What will be the output of the following Go code that inserts values into a BST and prints inorder traversal?
package main
import "fmt"
type Node struct {
  value int
  left, right *Node
}
func insert(root *Node, val int) *Node {
  if root == nil {
    return &Node{value: val}
  }
  if val < root.value {
    root.left = insert(root.left, val)
  } else {
    root.right = insert(root.right, val)
  }
  return root
}
func inorder(root *Node) {
  if root != nil {
    inorder(root.left)
    fmt.Print(root.value, " ")
    inorder(root.right)
  }
}
func main() {
  var root *Node
  values := []int{7, 3, 9, 1, 5}
  for _, v := range values {
    root = insert(root, v)
  }
  inorder(root)
}
medium
A. 1 3 5 7 9
B. 7 3 9 1 5
C. 9 7 5 3 1
D. 3 1 5 7 9

Solution

  1. Step 1: Insert values into BST

    Insert 7 as root, then 3 to left, 9 to right, 1 to left of 3, 5 to right of 3.
  2. Step 2: Perform inorder traversal

    Inorder visits left subtree, root, then right subtree. So nodes print in sorted order: 1 3 5 7 9.
  3. Final Answer:

    1 3 5 7 9 -> Option A
  4. Quick Check:

    Inorder traversal = sorted values [OK]
Hint: Inorder traversal of BST prints sorted values [OK]
Common Mistakes:
  • Confusing preorder or postorder with inorder
  • Misplacing nodes during insertion
  • Printing values without spaces
4. The following Go code tries to insert values into a BST but causes a runtime error. What is the error?
package main
import "fmt"
type Node struct {
  value int
  left, right *Node
}
func insert(root *Node, val int) {
  if root == nil {
    root = &Node{value: val}
    return
  }
  if val < root.value {
    insert(root.left, val)
  } else {
    insert(root.right, val)
  }
}
func main() {
  var root *Node
  insert(root, 10)
  insert(root, 5)
  insert(root, 15)
  fmt.Println(root)
}
medium
A. Panic due to nil pointer dereference
B. Stack overflow due to infinite recursion
C. Compilation error due to missing return type
D. root remains nil because insert does not update root pointer

Solution

  1. Step 1: Analyze insert function parameter

    insert takes root as value, not pointer to pointer, so changes to root inside insert do not affect caller.
  2. Step 2: Understand effect on root variable

    root in main remains nil because insert does not update it outside its scope, so tree is never built.
  3. Final Answer:

    root remains nil because insert does not update root pointer -> Option D
  4. Quick Check:

    Pointer not updated = root nil [OK]
Hint: Pass pointer to pointer to update root in insert [OK]
Common Mistakes:
  • Assuming root updates inside insert affect main
  • Ignoring pointer semantics in Go
  • Confusing runtime error with logical error
5. You want to store a large set of numbers and perform frequent searches. Why would using a BST be better than a plain Binary Tree, and what is the worst-case time complexity of search in a BST?
hard
A. Plain Binary Tree has better search time than BST
B. BST always guarantees O(1) search time due to sorting
C. BST allows faster average search (O(log n)) but worst-case can be O(n) if unbalanced
D. BST uses less memory and has O(n^2) search time in worst case

Solution

  1. Step 1: Compare search efficiency

    BST keeps elements sorted, so average search is O(log n), faster than plain Binary Tree which has no order.
  2. Step 2: Consider worst-case scenario

    If BST becomes unbalanced (like a linked list), search degrades to O(n) time.
  3. Final Answer:

    BST allows faster average search (O(log n)) but worst-case can be O(n) if unbalanced -> Option C
  4. Quick Check:

    Average O(log n), worst O(n) in BST [OK]
Hint: BST average search O(log n), worst O(n) if unbalanced [OK]
Common Mistakes:
  • Thinking BST always has O(1) search
  • Confusing plain Binary Tree search time
  • Ignoring unbalanced BST worst case
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