📖 Scenario: You are working with a Binary Search Tree (BST) that stores numbers. You want to find the next bigger number after a given number in the tree. This is called the inorder successor.Imagine the BST as a sorted list of numbers arranged in a tree shape. Finding the inorder successor means finding the number that comes right after a given number when you look at the tree in sorted order.
🎯 Goal: Build a program that creates a BST, sets a target node, finds the inorder successor of that node, and prints the successor's value or -1 if there is none.
📋 What You'll Learn
Create a BST with the exact nodes: 20, 9, 25, 5, 12, 11, 14
Create a pointer called target pointing to the node with value 9
Implement a function inorderSuccessor that finds the inorder successor of target in the BST
Print the value of the inorder successor node or -1 if no successor exists
💡 Why This Matters
🌍 Real World
Finding the inorder successor is useful in database indexing, scheduling tasks in order, and navigating sorted data efficiently.
💼 Career
Understanding BST operations like inorder successor is important for software engineers working with search trees, databases, and algorithms.
Progress0 / 4 steps
1
Create the BST nodes and build the tree
Create the BST nodes with values 20, 9, 25, 5, 12, 11, 14 using the TreeNode struct. Connect them to form the BST exactly as follows: 20 is root, 9 is left child of 20, 25 is right child of 20, 5 is left child of 9, 12 is right child of 9, 11 is left child of 12, 14 is right child of 12. Use pointers named exactly as root, node9, node25, node5, node12, node11, node14.
DSA C++
Hint
Use new TreeNode(value) to create nodes. Connect children using parent->left = child or parent->right = child.
2
Set the target node pointer
Create a pointer called target and set it to point to the node with value 9, which is node9.
DSA C++
Hint
Just assign target = node9; to point to the node with value 9.
3
Implement the inorderSuccessor function
Write a function TreeNode* inorderSuccessor(TreeNode* root, TreeNode* target) that finds the inorder successor of target in the BST rooted at root. Use the BST property to find the successor without traversing the whole tree.
Inside main(), call inorderSuccessor(root, target) and store the result in a pointer called successor.
DSA C++
Hint
Use a pointer successor to track the next bigger node. Move left or right depending on comparison with target->val.
4
Print the inorder successor value
Print the value of the successor node if it exists. If successor is nullptr, print -1.
DSA C++
Hint
Use cout to print successor->val if successor is not nullptr. Otherwise, print -1.
Practice
(1/5)
1. What is the inorder successor of a node in a Binary Search Tree (BST)?
easy
A. The node with the smallest key greater than the given node's key
B. The node with the largest key smaller than the given node's key
C. The left child of the given node
D. The right child of the given node
Solution
Step 1: Understand inorder traversal order
Inorder traversal visits nodes in ascending order of their keys in a BST.
Step 2: Define inorder successor
The inorder successor of a node is the next node visited after it in inorder traversal, which is the smallest node with a key greater than the current node.
Final Answer:
The node with the smallest key greater than the given node's key -> Option A
Quick Check:
Inorder successor = smallest greater key [OK]
Hint: Inorder successor is next bigger node in sorted order [OK]
Common Mistakes:
Confusing successor with predecessor
Thinking successor is always right child
Assuming successor is parent node
2. Which of the following C++ function signatures correctly represents a function to find the inorder successor of a BST node given the root and the node? Assume Node is a struct with int key, and left/right pointers.
easy
A. Node inorderSuccessor(Node root, Node p);
B. int inorderSuccessor(Node root, int p);
C. void inorderSuccessor(Node* root, Node* p);
D. Node* inorderSuccessor(Node* root, Node* p);
Solution
Step 1: Analyze parameter types
The function needs access to the BST root and the target node pointer, so pointers are required.
Step 2: Analyze return type
The function should return a pointer to the successor node or nullptr if none exists.
Final Answer:
Node* inorderSuccessor(Node* root, Node* p); -> Option D
Quick Check:
Use pointers for tree nodes and return pointer [OK]
Hint: Use pointers for tree nodes and return pointer [OK]
Common Mistakes:
Passing nodes by value instead of pointer
Returning void instead of Node*
Using int instead of Node* for node parameters
3. Given the BST below and the node with key 15, what is the inorder successor's key?
20
/ \
10 30
\ \
15 40
medium
A. 10
B. 20
C. 30
D. 40
Solution
Step 1: Locate node 15 and find successor
Node 15 has no right child, so successor is the lowest ancestor whose left child is also ancestor of 15.
Step 2: Identify successor in BST
20 is the parent of 15's ancestor and 15 is in left subtree of 20, so successor is 20.
Final Answer:
20 -> Option B
Quick Check:
Successor of 15 is 20 [OK]
Hint: If no right child, go up to first bigger ancestor [OK]
Common Mistakes:
Choosing right child 30 incorrectly
Choosing 40 which is too far
Choosing 10 which is smaller
4. Consider this buggy C++ code snippet to find the inorder successor of a node in BST:
B. It incorrectly updates succ when p->key == root->key
C. It does not handle the case when p is nullptr
D. It returns the wrong node when p has a right child
Solution
Step 1: Check null pointer dereference
The code immediately accesses p->right and later p->key without verifying if p is nullptr, leading to a segmentation fault.
Step 2: Verify other logic
Right subtree min is correctly found. Ancestor search properly sets succ only on left branches and handles equality by traversing right (null since no right child).
Final Answer:
It does not handle the case when p is nullptr -> Option C
Quick Check:
Missing p == nullptr check before dereference [OK]
Hint: Missing nullptr check for input node p [OK]
Common Mistakes:
Ignoring nullptr checks for p
Confusing left child check for successor
Assuming bug in right subtree handling
5. You have a BST with nodes having keys: 5, 3, 7, 2, 4, 6, 8. You want to find the inorder successor of node with key 7. Which of the following is the correct approach to find it efficiently?
hard
A. If node 7 has right child, successor is leftmost node in right subtree; else, go up to first ancestor larger than 7
B. Successor is always the right child of node 7
C. Successor is the parent of node 7 regardless of children
D. Successor is the left child of node 7
Solution
Step 1: Check if node 7 has right child
Node 7 has right child 8, so successor is leftmost node in right subtree, which is 8 itself.
Step 2: If no right child, find first ancestor larger than node
This step is for cases where right child is absent, not applicable here.
Final Answer:
If node 7 has right child, successor is leftmost node in right subtree; else, go up to first ancestor larger than 7 -> Option A
Quick Check:
Right child exists, successor = leftmost right subtree [OK]
Hint: Check right subtree first; else climb ancestors [OK]
Common Mistakes:
Assuming successor is always right child
Ignoring ancestor climbing when no right child
Confusing successor with parent node
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.