The logic behind searching a node in a BST is as follows:
Example : If we are to search node ( 7 ), we compare it with root node ( 5 ). As node ( 7 ) is greater than node ( 5 ), we move to the right of root node i.e we now search the right sub-tree.
Time complexity of searching a node in a BST with N nodes : Worst-case time complexity is O ( N ), if the tree is linear; i.e to search in a BST that is linear (unbalanced) all the nodes will have to be traversed and compared. Best-case time complexity is O ( log N ), if the tree is balanced, i.e for a balanced BST the height would be log N, and hence log N comparisons would be needed before a node is found in the tree.
Program for searching a node in a BST
from typing import Optional # For annotations
class Node :
def __init__(self, data=0, left_node=None, right_node=None) :
self.data = data
self.left = left_node
self.right = right_node
class Tree :
def SearchBST (self, root: Optional[Node], data: int) -> Optional[Node] :
if (root == None or root.data == data) :
return root
elif (root.data < data) :
return self.SearchBST(root.right, data)
elif (root.data > data) :
return self.SearchBST(root.left, data)
return None
if __name__ == "__main__" :
# 6
# / \
# 4 9
node4 = Node(4)
node9 = Node(9)
root_node6 = Node(4, node4, node9)
t = Tree()
data = 9
if (t.SearchBST(root_node6, data) != None) :
print( "Node " + str(data) + " found")
# 5
# / \
# 1 7
# \
# 8
node1 = Node(1)
node8 = Node(8)
node7 = Node(7, None, node8)
root_node5 = Node(5, node1, node7)
data = 7
if (t.SearchBST(root_node5, data) != None) :
print( "Node " + str(data) + " found")
data = 10
if (t.SearchBST(root_node5, data) != None) :
print( "Node " + str(data) + " found")
Output
Node 9 found
Node 7 found
#include<iostream>
#include<vector>
using namespace std;
class Node {
public:
int data;
Node * left;
Node * right;
Node(int x) : data(x), left(NULL), right(NULL)
{}
Node(int x, Node* left_node, Node* right_node) : data(x), left(left_node), right(right_node)
{}
};
class Tree {
public:
Node * SearchBST(Node * root, int data) {
if (root == NULL or root->data == data) {
return root;
} else if (root->data < data) {
return SearchBST(root->right, data);
} else if (root->data > data) {
return SearchBST(root->left, data);
}
return NULL;
}
};
int main() {
/* 6
/ \
4 9 */
Node node4(4), node9(9);
Node root_node6(4, &node4, &node9);
Tree t;
int data = 9;
if (t.SearchBST(&root_node6, data) != NULL) {
cout << "Node " << data << " found" << endl;
}
/* 5
/ \
1 7
\
8 */
Node node1(1), node8(8);
Node node7(7, nullptr, &node8);
Node root_node5(5, &node1, &node7);
data = 7;
if (t.SearchBST(&root_node5, data) != NULL) {
cout << "Node " << data << " found" << endl;
}
data = 10;
if (t.SearchBST(&root_node5, data) != NULL) {
cout << "Node " << data << " found" << endl;
}
return 0;
}
Output
Node 9 found.
Node 7 found.
class Tree {
Node SearchBST (Node root, int data) {
if (root == null || root.data == data) {
return root;
} else if (root.data < data) {
return SearchBST(root.right, data);
} else if (root.data > data) {
return SearchBST(root.left, data);
}
return null;
}
static class Node {
int data;
Node left;
Node right;
Node () {}
Node (int x) { this.data = x; }
Node (int x, Node left_node, Node right_node) {
data = x;
left = left_node;
right = right_node;
}
}
public static void main (String[] args) {
/* 6
/ \
4 9 */
Node node4 = new Node(4);
Node node9 = new Node(9);
Node root_node6 = new Node(4, node4, node9);
Tree t = new Tree();
int data = 9;
if (t.SearchBST(root_node6, data) != null) {
System.out.println( "Node " + data + " found");
}
/* 5
/ \
1 7
\
8 */
Node node1 = new Node(1);
Node node8 = new Node(8);
Node node7 = new Node(7, null, node8);
Node root_node5 = new Node(5, node1, node7);
data = 7;
if (t.SearchBST(root_node5, data) != null) {
System.out.println( "Node " + data + " found");
}
data = 10;
if (t.SearchBST(root_node5, data) != null) {
System.out.println( "Node " + data + " found");
}
}
}
Output
Node 9 found
Node 7 found
© 2019-2026 Algotree.org | All rights reserved.
This content is provided for educational purposes. Feel free to learn, practice, and share knowledge.
For questions or contributions, visit algotree.org
"Without requirements or design, programming is the art of adding bugs to an empty text file. - Louis Srygley"