Bird
Raised Fist0
DSA Cprogramming~5 mins

BST Inorder Predecessor in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the inorder predecessor in a Binary Search Tree (BST)?
The inorder predecessor of a node in a BST is the node that comes immediately before it in the inorder traversal (left-root-right). It is the largest node smaller than the given node.
Click to reveal answer
beginner
How do you find the inorder predecessor if the node has a left subtree?
If the node has a left subtree, the inorder predecessor is the rightmost (maximum) node in that left subtree.
Click to reveal answer
intermediate
What if the node does not have a left subtree? How to find its inorder predecessor?
If the node has no left subtree, move up the tree using parent pointers until you find a node which is the right child of its parent. That parent is the inorder predecessor.
Click to reveal answer
intermediate
Why is the inorder predecessor important in BST operations?
It helps in deletion of nodes, finding next smaller elements, and in various tree traversal and search algorithms.
Click to reveal answer
beginner
What is the inorder predecessor of the smallest node in a BST?
The smallest node has no inorder predecessor because there is no smaller node in the BST.
Click to reveal answer
In a BST, the inorder predecessor of a node is:
AThe root node
BThe smallest node larger than the given node
CThe rightmost node in the right subtree
DThe largest node smaller than the given node
If a node has a left subtree, where do you look to find its inorder predecessor?
ALeftmost node in the right subtree
BParent node
CRightmost node in the left subtree
DRoot node
If a node has no left subtree, how do you find its inorder predecessor?
AMove up to the parent until the node is a right child
BGo to the right child
CGo to the left child
DIt has no inorder predecessor
What is the inorder predecessor of the smallest node in a BST?
ANo inorder predecessor
BThe root node
CItself
DThe largest node
Why is finding the inorder predecessor useful?
ATo find the next larger node
BTo delete a node correctly
CTo find the root node
DTo balance the BST
Explain how to find the inorder predecessor of a node in a BST when it has a left subtree.
Think about the largest smaller value in the left subtree.
You got /3 concepts.
    Describe the steps to find the inorder predecessor when the node has no left subtree.
    Consider moving up until you find a node that is a right child.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the inorder predecessor of a node in a Binary Search Tree (BST)?
      easy
      A. The node with the largest value smaller than the given node
      B. The node with the smallest value larger than the given node
      C. The left child of the given node
      D. The right child of the given node

      Solution

      1. Step 1: Understand inorder traversal in BST

        Inorder traversal visits nodes in ascending order of their values.
      2. Step 2: Define inorder predecessor

        The inorder predecessor of a node is the node visited just before it in inorder traversal, which means it has the largest value smaller than the current node.
      3. Final Answer:

        The node with the largest value smaller than the given node -> Option A
      4. Quick Check:

        Inorder predecessor = largest smaller value [OK]
      Hint: Predecessor is largest smaller value in BST [OK]
      Common Mistakes:
      • Confusing predecessor with successor
      • Thinking predecessor is always left child
      • Assuming predecessor is the parent node
      2. Which of the following C code snippets correctly finds the inorder predecessor of a given node node in a BST when the node has a left subtree?
      easy
      A. Node* pred = node->left; while (pred->right != NULL) pred = pred->right;
      B. Node* pred = node->right; while (pred->left != NULL) pred = pred->left;
      C. Node* pred = node->left; while (pred->left != NULL) pred = pred->left;
      D. Node* pred = node->right; while (pred->right != NULL) pred = pred->right;

      Solution

      1. Step 1: Identify inorder predecessor in left subtree

        If node has a left child, predecessor is the rightmost node in left subtree.
      2. Step 2: Trace code logic

        Starting from node->left, moving right until right child is NULL finds the rightmost node.
      3. Final Answer:

        Node* pred = node->left; while (pred->right != NULL) pred = pred->right; -> Option A
      4. Quick Check:

        Left subtree's rightmost node = predecessor [OK]
      Hint: Go left once, then right as far as possible [OK]
      Common Mistakes:
      • Going right subtree instead of left
      • Moving left repeatedly instead of right
      • Starting from node->right instead of node->left
      3. Given the BST below and the node with value 15, what is its inorder predecessor?
      
              20
             /  \
           10    30
             \     \
             15    40
      
      medium
      A. 30
      B. 15
      C. 20
      D. 10

      Solution

      1. Step 1: Locate node 15 and check left subtree

        Node 15 has no left child, so predecessor is an ancestor smaller than 15.
      2. Step 2: Find nearest ancestor smaller than 15

        Ancestor 10 is smaller than 15 and is the closest on the path to root.
      3. Final Answer:

        10 -> Option D
      4. Quick Check:

        Predecessor of 15 is 10 [OK]
      Hint: If no left child, go up to smaller ancestor [OK]
      Common Mistakes:
      • Choosing node itself as predecessor
      • Choosing larger ancestor like 20
      • Confusing predecessor with successor
      4. Consider this buggy C function to find the inorder predecessor of a node in a BST:
      
      Node* inorderPredecessor(Node* root, Node* node) {
          if (node->left != NULL) {
              Node* pred = node->left;
              while (pred->left != NULL) {
                  pred = pred->left;
              }
              return pred;
          }
          Node* pred = NULL;
          Node* ancestor = root;
          while (ancestor != node) {
              if (node->data > ancestor->data) {
                  pred = ancestor;
                  ancestor = ancestor->right;
              } else {
                  ancestor = ancestor->left;
              }
          }
          return pred;
      }
      
      What is the main error in this code?
      medium
      A. The ancestor traversal is incorrect and may cause infinite loop
      B. The function does not handle the case when node has no left subtree
      C. The while loop should move right in left subtree, not left
      D. The function returns NULL even if predecessor exists

      Solution

      1. Step 1: Analyze left subtree traversal

        In left subtree, predecessor is rightmost node, so loop should move right, not left.
      2. Step 2: Check code loop

        Code incorrectly moves left repeatedly, so it finds leftmost node instead of rightmost.
      3. Final Answer:

        The while loop should move right in left subtree, not left -> Option C
      4. Quick Check:

        Left subtree traversal must go right for predecessor [OK]
      Hint: In left subtree, go right to find predecessor [OK]
      Common Mistakes:
      • Moving left instead of right in left subtree
      • Ignoring ancestor traversal logic
      • Assuming predecessor is always left child
      5. You have a BST where each node has a pointer to its parent. Write the logic to find the inorder predecessor of a node node that has no left child. Which approach correctly finds the predecessor?
      hard
      A. Return the right child of the node's parent
      B. Move up using parent pointers until you find a node which is right child of its parent; then return that parent
      C. Move up using parent pointers until you find a node which is left child of its parent; then return that parent
      D. Return the left child of the node's parent

      Solution

      1. Step 1: Understand no left child case

        If node has no left child, predecessor is an ancestor where node is in right subtree.
      2. Step 2: Use parent pointers to find such ancestor

        Move up until current node is right child of its parent; that parent is predecessor.
      3. Final Answer:

        Move up using parent pointers until you find a node which is right child of its parent; then return that parent -> Option B
      4. Quick Check:

        Go up to right-child parent for predecessor [OK]
      Hint: Go up until node is right child, then parent is predecessor [OK]
      Common Mistakes:
      • Stopping at left child parent
      • Returning sibling nodes incorrectly
      • Assuming predecessor is always child 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