Bird
Raised Fist0
DSA C++programming~5 mins

BST Inorder Successor in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the inorder successor of a node in a Binary Search Tree (BST)?
The inorder successor of a node in a BST is the node with the smallest key greater than the given node's key. It is the next node visited in an inorder traversal.
Click to reveal answer
beginner
How do you find the inorder successor if the node has a right child?
If the node has a right child, the inorder successor is the leftmost node in the node's right subtree.
Click to reveal answer
intermediate
How do you find the inorder successor if the node has no right child?
If the node has no right child, the inorder successor is one of its ancestors. Specifically, it is the lowest ancestor of the node whose left child is also an ancestor of the node.
Click to reveal answer
beginner
What is the inorder successor of the maximum node in a BST?
The maximum node in a BST has no inorder successor because there is no node with a greater key.
Click to reveal answer
intermediate
Explain the role of parent pointers in finding the inorder successor.
Parent pointers allow moving up the tree to find the inorder successor when the node has no right child. Without parent pointers, you need to start from the root to find the successor.
Click to reveal answer
What is the inorder successor of a node with a right subtree?
AThe node itself
BThe leftmost node in the right subtree
CThe parent node
DThe rightmost node in the left subtree
If a node has no right child, how do you find its inorder successor?
AFind the rightmost node in the left subtree
BThe inorder successor is the root
CThe node has no inorder successor
DFind the lowest ancestor whose left child is also an ancestor of the node
What is the inorder successor of the maximum node in a BST?
AThe root node
BThe minimum node
CNo inorder successor exists
DThe parent node
Why are parent pointers helpful in finding the inorder successor?
AThey allow moving up the tree without starting from the root
BThey store the successor directly
CThey help find the minimum node
DThey are not helpful
In an inorder traversal, what order are nodes visited?
ALeft subtree, node, right subtree
BNode, left subtree, right subtree
CRight subtree, node, left subtree
DNode, right subtree, left subtree
Describe the steps to find the inorder successor of a node in a BST when the node has a right child.
Think about the smallest node greater than the current node.
You got /4 concepts.
    Explain how to find the inorder successor of a node without a right child in a BST.
    Consider the path from the node to the root.
    You got /4 concepts.

      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

      1. Step 1: Understand inorder traversal order

        Inorder traversal visits nodes in ascending order of their keys in a BST.
      2. 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.
      3. Final Answer:

        The node with the smallest key greater than the given node's key -> Option A
      4. 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

      1. Step 1: Analyze parameter types

        The function needs access to the BST root and the target node pointer, so pointers are required.
      2. Step 2: Analyze return type

        The function should return a pointer to the successor node or nullptr if none exists.
      3. Final Answer:

        Node* inorderSuccessor(Node* root, Node* p); -> Option D
      4. 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

      1. 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.
      2. 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.
      3. Final Answer:

        20 -> Option B
      4. 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:
      
      Node* inorderSuccessor(Node* root, Node* p) {
          if (p->right != nullptr) {
              Node* curr = p->right;
              while (curr->left != nullptr) {
                  curr = curr->left;
              }
              return curr;
          }
          Node* succ = nullptr;
          while (root != nullptr) {
              if (p->key < root->key) {
                  succ = root;
                  root = root->left;
              } else {
                  root = root->right;
              }
          }
          return succ;
      }
      
      What is the bug in this code?
      medium
      A. It does not check if p has a left child
      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

      1. 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.
      2. 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).
      3. Final Answer:

        It does not handle the case when p is nullptr -> Option C
      4. 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

      1. 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.
      2. 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.
      3. 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
      4. 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 unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard