Bird
Raised Fist0
DSA Pythonprogramming~5 mins

BST Inorder Predecessor in DSA Python - 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. 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 operations like deletion of a node by replacing the node with its inorder predecessor to maintain BST properties.
Click to reveal answer
beginner
In inorder traversal, what is the order of nodes visited?
Inorder traversal visits nodes in ascending order: left subtree, current node, then right subtree.
Click to reveal answer
What is the inorder predecessor of a node with a left subtree in a BST?
AThe leftmost node in the right subtree
BThe parent node
CThe root node
DThe rightmost node in the left subtree
If a node has no left subtree, how do you find its inorder predecessor?
AFind the leftmost node in the right subtree
BMove up until you find a node that is the right child of its parent
CIt has no inorder predecessor
DMove down to the leftmost leaf
Why do we use the inorder predecessor in BST deletion?
ATo find the root node
BTo find the smallest node in the tree
CTo replace a node with a node smaller than it to maintain BST order
DTo balance the tree
In inorder traversal, which order are nodes visited?
ALeft subtree, current node, right subtree
BCurrent node, left subtree, right subtree
CRight subtree, current node, left subtree
DRight subtree, left subtree, current node
What is the inorder predecessor of the smallest node in a BST?
ANo inorder predecessor (null)
BThe root node
CItself
DThe rightmost node
Explain how to find the inorder predecessor of a node in a BST with and without a left subtree.
Think about the inorder traversal order and how predecessor relates to it.
You got /2 concepts.
    Describe why the inorder predecessor is useful when deleting a node from a BST.
    Consider how BST structure must remain sorted after deletion.
    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 order

        Inorder traversal visits nodes in ascending order for BST, so predecessor is the previous node in this order.
      2. Step 2: Define inorder predecessor

        The inorder predecessor is the node with the largest value smaller than the current node's value.
      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 just before current node in sorted order [OK]
      Common Mistakes:
      • Confusing predecessor with successor
      • Thinking predecessor is always left child
      • Assuming predecessor is the parent node
      2. Which of the following Python code snippets correctly finds the inorder predecessor of a node with a left subtree in a BST?
      easy
      A. temp = node.right while temp.right: temp = temp.right return temp
      B. temp = node.right while temp.left: temp = temp.left return temp
      C. temp = node.left while temp.left: temp = temp.left return temp
      D. temp = node.left while temp.right: temp = temp.right return temp

      Solution

      1. Step 1: Identify inorder predecessor logic for left subtree

        If node has left child, predecessor is the rightmost node in left subtree.
      2. Step 2: Check code correctness

        Code D moves to left child, then goes right as far as possible, correctly finding predecessor.
      3. Final Answer:

        Code snippet D correctly finds the inorder predecessor -> Option D
      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
      • Going left repeatedly instead of right in left subtree
      • Returning left child directly without traversal
      3. Given the BST below and the node with value 15, what is the inorder predecessor?
             20
            /  \
          10    30
            \     \
            15    40
      
      medium
      A. 20
      B. 15
      C. 10
      D. None

      Solution

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

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

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

        10 -> Option C
      4. Quick Check:

        Predecessor of 15 is 10 [OK]
      Hint: If no left child, go up to smaller ancestor [OK]
      Common Mistakes:
      • Choosing 20 which is larger
      • Choosing node itself as predecessor
      • Assuming predecessor is None without checking ancestors
      4. The following code attempts to find the inorder predecessor of a node in a BST but has a bug. What is the bug?
      def inorder_predecessor(root, node):
          if node.left:
              temp = node.left
              while temp.left:
                  temp = temp.left
              return temp
          else:
              predecessor = None
              while root:
                  if node.val > root.val:
                      predecessor = root
                      root = root.right
                  else:
                      root = root.left
              return predecessor
      
      medium
      A. The else block incorrectly updates predecessor
      B. The while loop should check temp.right, not temp.left
      C. The function does not handle empty tree
      D. The function should return None if node has no left child

      Solution

      1. Step 1: Analyze left subtree traversal

        In left subtree, predecessor is rightmost node, so loop should go right, not left.
      2. Step 2: Identify correct traversal direction

        Changing while temp.left to while temp.right fixes the bug.
      3. Final Answer:

        The while loop should check temp.right, not temp.left -> Option B
      4. Quick Check:

        Predecessor in left subtree = rightmost node [OK]
      Hint: Go right in left subtree, not left [OK]
      Common Mistakes:
      • Looping left instead of right in left subtree
      • Ignoring else block logic
      • Not returning predecessor correctly
      5. You want to find the inorder predecessor of a node in a BST that does NOT have a left child. Which approach correctly finds the predecessor?
      hard
      A. Traverse from root, track the last node smaller than current node
      B. Return the rightmost node in the left subtree
      C. Return the parent node if it is smaller than the current node
      D. Return the left child of the current node

      Solution

      1. Step 1: Understand no left child case

        If node has no left child, predecessor is an ancestor smaller than node.
      2. Step 2: Use root traversal to track predecessor

        Traverse from root, update predecessor when node value is greater than root's value.
      3. Step 3: Return last tracked smaller ancestor

        This gives the inorder predecessor correctly.
      4. Final Answer:

        Traverse from root, track the last node smaller than current node -> Option A
      5. Quick Check:

        No left child -> track smaller ancestor [OK]
      Hint: Track last smaller ancestor from root [OK]
      Common Mistakes:
      • Returning parent without checking value
      • Returning left child when none exists
      • Trying to find predecessor in left subtree when none exists
      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