📖 Scenario: You are working with a Binary Search Tree (BST) that stores numbers. You want to find the largest number in this tree. This is useful when you want to know the maximum value stored in your data structure quickly.
🎯 Goal: Build a simple BST with given nodes, then write code to find and print the maximum element in the BST.
📋 What You'll Learn
Create a BST by inserting nodes with exact values
Use a variable to start from the root node
Traverse the BST to find the maximum element
Print the maximum element found
💡 Why This Matters
🌍 Real World
Finding the maximum value in a BST is useful in databases, search engines, and any system that needs quick access to the largest stored value.
💼 Career
Understanding BST operations like finding maximum values is important for software developers working with data structures, algorithms, and performance optimization.
Progress0 / 4 steps
1
Create the BST Node class and insert nodes
Create a class called Node with an __init__ method that takes self and data parameters and initializes self.left and self.right to None. Then create a BST by creating nodes with these exact values and links: root = Node(15) root.left = Node(10) root.right = Node(20) root.left.left = Node(8) root.left.right = Node(12) root.right.right = Node(25)
DSA Python
Hint
Remember, each node has data, left, and right attributes. Start by defining the class, then create the nodes and link them exactly as shown.
2
Set a variable to start at the root node
Create a variable called current and set it equal to root. This variable will help us move through the BST to find the maximum element.
DSA Python
Hint
Just assign the variable current to the root node.
3
Traverse the BST to find the maximum element
Use a while loop to move current to its right child as long as current.right is not None. This will help you reach the maximum element in the BST.
DSA Python
Hint
Keep moving current to current.right until there is no right child left.
4
Print the maximum element found
Print the data attribute of the current node using print(current.data). This will show the maximum element in the BST.
DSA Python
Hint
Use print(current.data) to show the maximum value.
Practice
(1/5)
1. In a Binary Search Tree (BST), where is the maximum element always located?
easy
A. At the root node
B. At the leftmost node
C. At the rightmost node
D. At any leaf node
Solution
Step 1: Understand BST property
In a BST, all values in the right subtree are greater than the root, so the largest value is towards the right.
Step 2: Locate the maximum element
The maximum element is found by moving to the right child repeatedly until no more right child exists.
Final Answer:
At the rightmost node -> Option C
Quick Check:
Maximum element = rightmost node [OK]
Hint: Go right until no more right child [OK]
Common Mistakes:
Thinking maximum is at the root
Looking at left subtree for maximum
Assuming maximum can be any leaf
2. Which of the following Python code snippets correctly finds the maximum element in a BST node structure where each node has left and right attributes?
easy
A. def find_max(root):
while root.right:
root = root.right
return root.data
B. def find_max(root):
while root.left:
root = root.left
return root.data
C. def find_max(root):
if root is None:
return None
return root.data
D. def find_max(root):
return max(root.left.data, root.right.data)
Solution
Step 1: Check traversal direction for max
Maximum is found by moving right until no right child exists, so loop should check root.right.
Step 2: Verify code correctness
def find_max(root):
while root.right:
root = root.right
return root.data correctly loops while root.right exists, then returns root.data. Others either go left or incorrectly use max function.
Final Answer:
while root.right: root = root.right; return root.data -> Option A
Quick Check:
Loop right child until none = correct max finder [OK]
Hint: Loop on root.right to find max [OK]
Common Mistakes:
Looping on root.left instead of root.right
Returning root.data without traversal
Using max() on children without recursion
3. What will be the output of the following code snippet?
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def find_max(root):
current = root
while current.right:
current = current.right
return current.data
root = Node(10)
root.left = Node(5)
root.right = Node(20)
root.right.right = Node(30)
print(find_max(root))
medium
A. 10
B. 30
C. 20
D. 5
Solution
Step 1: Trace the BST structure
Root is 10, right child 20, right of 20 is 30. Maximum is the rightmost node 30.
Step 2: Follow the find_max function
Function moves right from 10 to 20, then to 30, then stops as 30 has no right child, returning 30.
Final Answer:
30 -> Option B
Quick Check:
Rightmost node data = 30 [OK]
Hint: Follow right pointers to last node [OK]
Common Mistakes:
Returning root data instead of rightmost
Confusing left and right children
Stopping traversal too early
4. The following code is intended to find the maximum element in a BST but contains a bug. What is the bug?
def find_max(root):
if root is None:
return None
while root.left:
root = root.left
return root.data
medium
A. It causes infinite loop
B. It does not handle empty tree
C. It returns None instead of data
D. It incorrectly traverses left child instead of right child
Solution
Step 1: Analyze traversal direction
The code loops while root.left exists, moving left, but maximum is on the right side in BST.
Step 2: Identify correct traversal
To find maximum, loop should be on root.right until no right child remains.
Final Answer:
It incorrectly traverses left child instead of right child -> Option D
Quick Check:
Max element found by going right, not left [OK]
Hint: Max is rightmost, so loop on root.right [OK]
Common Mistakes:
Looping on left child for max
Ignoring empty tree check
Returning wrong node data
5. Given a BST where some nodes have duplicate values, which approach correctly finds the maximum element considering duplicates are allowed only on the right subtree?
class Node:
def __init__(self, data):
self.data = data
self.left = None
self.right = None
def find_max(root):
# Your code here
pass
Choose the correct implementation to find the maximum element.
hard
A. def find_max(root):
current = root
while current.right:
current = current.right
return current.data
B. def find_max(root):
if root.right is None:
return root.data
return find_max(root.left)
D. def find_max(root):
if root is None:
return float('-inf')
return max(root.data, find_max(root.left))
Solution
Step 1: Understand duplicates in BST
Duplicates allowed only on right means maximum is still the rightmost node.
Step 2: Choose correct traversal
def find_max(root):
current = root
while current.right:
current = current.right
return current.data correctly moves right until no right child exists, returning the maximum value.
Step 3: Analyze other options
def find_max(root):
if root.right is None:
return root.data
return find_max(root.left) incorrectly recurses left; def find_max(root):
max_val = root.data
max_val = max(max_val, find_max(root.left))
max_val = max(max_val, find_max(root.right))
return max_val lacks None checks before recursing, causing AttributeError on None children; def find_max(root):
if root is None:
return float('-inf')
return max(root.data, find_max(root.left)) ignores right subtree.
Final Answer:
while current.right: current = current.right; return current.data -> Option A
Quick Check:
Rightmost node = max even with duplicates [OK]
Hint: Duplicates on right? Still go rightmost [OK]
Common Mistakes:
Searching left subtree for max
Checking both subtrees unnecessarily
Ignoring None checks causing errors
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.