0
0
DSA Goprogramming~20 mins

BST Insert Operation in DSA Go - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
BST Insert Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output after inserting nodes in BST
What is the printed state of the BST after inserting the values 10, 5, 15, 3, 7 in that order? The BST is printed in-order (left -> root -> right).
DSA Go
package main

import "fmt"

type Node struct {
    val   int
    left  *Node
    right *Node
}

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
}

func inorder(root *Node) {
    if root == nil {
        return
    }
    inorder(root.left)
    fmt.Print(root.val, " -> ")
    inorder(root.right)
}

func main() {
    var root *Node
    values := []int{10, 5, 15, 3, 7}
    for _, v := range values {
        root = insert(root, v)
    }
    inorder(root)
    fmt.Print("null\n")
}
A3 -> 5 -> 7 -> 10 -> 15 -> null
B10 -> 5 -> 15 -> 3 -> 7 -> null
C15 -> 10 -> 7 -> 5 -> 3 -> null
D3 -> 7 -> 5 -> 10 -> 15 -> null
Attempts:
2 left
💡 Hint
Remember that in-order traversal of a BST prints values in ascending order.
Predict Output
intermediate
2:00remaining
Output after inserting duplicate value in BST
What is the printed state of the BST after inserting the values 8, 3, 10, 3 in that order? Assume duplicates are inserted to the right subtree.
DSA Go
package main

import "fmt"

type Node struct {
    val   int
    left  *Node
    right *Node
}

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
}

func inorder(root *Node) {
    if root == nil {
        return
    }
    inorder(root.left)
    fmt.Print(root.val, " -> ")
    inorder(root.right)
}

func main() {
    var root *Node
    values := []int{8, 3, 10, 3}
    for _, v := range values {
        root = insert(root, v)
    }
    inorder(root)
    fmt.Print("null\n")
}
A8 -> 3 -> 3 -> 10 -> null
B3 -> 8 -> 3 -> 10 -> null
C3 -> 3 -> 8 -> 10 -> null
D3 -> 8 -> 10 -> 3 -> null
Attempts:
2 left
💡 Hint
Duplicates go to the right subtree, so the second 3 is inserted as right child of the first 3.
🔧 Debug
advanced
2:30remaining
Identify the bug in BST insert function
The following Go code attempts to insert a value into a BST but causes infinite recursion. What is the bug?
DSA Go
func insert(root *Node, val int) *Node {
    if root == nil {
        return &Node{val: val}
    }
    if val <= root.val {
        insert(root.left, val)
    } else {
        insert(root.right, val)
    }
    return root
}
AThe recursive calls do not assign the returned node back to root.left or root.right.
BThe base case is missing for root == nil.
CThe comparison should be val < root.val, not val <= root.val.
DThe function should return void, not *Node.
Attempts:
2 left
💡 Hint
Check if the tree links are updated after recursion.
🧠 Conceptual
advanced
1:30remaining
Number of nodes after insertions in BST
If you insert the values 20, 10, 30, 25, 35, 10 into an empty BST (duplicates allowed), how many nodes will the BST contain?
A7
B5
C4
D6
Attempts:
2 left
💡 Hint
Duplicates are inserted as new nodes in the right subtree.
🚀 Application
expert
3:00remaining
BST structure after complex insertions
After inserting the values 50, 30, 70, 20, 40, 60, 80, 65 into an empty BST, what is the in-order traversal output?
DSA Go
package main

import "fmt"

type Node struct {
    val   int
    left  *Node
    right *Node
}

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
}

func inorder(root *Node) {
    if root == nil {
        return
    }
    inorder(root.left)
    fmt.Print(root.val, " -> ")
    inorder(root.right)
}

func main() {
    var root *Node
    values := []int{50, 30, 70, 20, 40, 60, 80, 65}
    for _, v := range values {
        root = insert(root, v)
    }
    inorder(root)
    fmt.Print("null\n")
}
A20 -> 30 -> 40 -> 50 -> 65 -> 60 -> 70 -> 80 -> null
B20 -> 30 -> 40 -> 50 -> 60 -> 65 -> 70 -> 80 -> null
C50 -> 30 -> 20 -> 40 -> 70 -> 60 -> 65 -> 80 -> null
D20 -> 30 -> 40 -> 50 -> 60 -> 70 -> 65 -> 80 -> null
Attempts:
2 left
💡 Hint
In-order traversal prints nodes in ascending order.