Skip to content

Commit 28d4b55

Browse files
authored
Merge pull request #1375 from Maheshwari-Love/add/avl-tree
added AVL search algorithm in searching techniques
2 parents 0b8f4f8 + c38b896 commit 28d4b55

File tree

2 files changed

+195
-0
lines changed

2 files changed

+195
-0
lines changed

assets/Avl-Tree.png

26.7 KB
Loading
Lines changed: 195 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,195 @@
1+
---
2+
id: avl-tree-search
3+
title: AVL Tree Search (Geeks for Geeks)
4+
sidebar_label: AVL Tree Search
5+
tags:
6+
- Beginner
7+
- Search Algorithms
8+
- Geeks for Geeks
9+
- CPP
10+
- Python
11+
- Java
12+
- JavaScript
13+
- DSA
14+
description: "This is a solution to the AVL Tree Search problem on Geeks for Geeks."
15+
---
16+
17+
## What is AVL Tree Search?
18+
19+
AVL Tree Search is a search operation performed on an AVL tree, a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by no more than one, ensuring O(log N) time complexity for search operations.
20+
21+
## Algorithm for AVL Tree Search
22+
23+
1. Start at the root node of the AVL tree.
24+
2. Compare the target value with the value of the current node:
25+
- If the target value equals the current node's value, return the node.
26+
- If the target value is less than the current node's value, move to the left child.
27+
- If the target value is greater than the current node's value, move to the right child.
28+
3. Repeat step 2 until the target value is found or the current node becomes null.
29+
4. If the target value is not found, return null.
30+
31+
## How does AVL Tree Search work?
32+
33+
- It begins by comparing the target value to the value of the root node.
34+
- If the target value matches the root node's value, the search is complete.
35+
- If the target value is less than the root node's value, the search continues in the left subtree.
36+
- If the target value is greater than the root node's value, the search continues in the right subtree.
37+
- This process continues until the target value is found or a leaf node is reached without finding the target value.
38+
39+
![Example for AVL Tree Search(GFG)](../../assets/Avl-Tree.png)
40+
41+
## Problem Description
42+
43+
Given an AVL tree and a target element, implement the AVL Tree Search algorithm to find the node containing the target value in the tree. If the element is not present, return null.
44+
45+
## Examples
46+
47+
**Example 1:**
48+
```
49+
Input:
50+
AVL Tree:
51+
9
52+
/ \
53+
5 12
54+
/ \ \
55+
2 7 15
56+
57+
Target: 7
58+
Output: Node with value 7
59+
60+
```
61+
62+
## Your Task:
63+
64+
You don't need to read input or print anything. Complete the function avlTreeSearch() which takes the root of the AVL tree and a target value as input parameters and returns the node containing the target value. If the target value is not present in the tree, return null.
65+
66+
Expected Time Complexity: $O(LogN)$
67+
Expected Auxiliary Space: $O(1)$
68+
69+
## Constraints
70+
71+
- $1 <= Number of nodes <= 10^5$
72+
- $1 <= Node value <= 10^6$
73+
- $1 <= Target value <= 10^6$
74+
75+
## Implementation
76+
77+
<Tabs>
78+
79+
<TabItem value="C++" label="C++">
80+
<SolutionAuthor name="@ngmuraqrdd"/>
81+
```cpp
82+
#include <iostream>
83+
84+
struct AVLNode {
85+
int value;
86+
AVLNode* left;
87+
AVLNode* right;
88+
AVLNode(int val) : value(val), left(nullptr), right(nullptr) {}
89+
};
90+
91+
AVLNode* avlTreeSearch(AVLNode* root, int target) {
92+
AVLNode* current = root;
93+
while (current) {
94+
if (current->value == target) {
95+
return current;
96+
} else if (current->value < target) {
97+
current = current->right;
98+
} else {
99+
current = current->left;
100+
}
101+
}
102+
return nullptr;
103+
}
104+
105+
int main() {
106+
AVLNode* root = new AVLNode(9);
107+
root->left = new AVLNode(5);
108+
root->right = new AVLNode(12);
109+
root->left->left = new AVLNode(2);
110+
root->left->right = new AVLNode(7);
111+
root->right->right = new AVLNode(15);
112+
113+
int target = 7;
114+
AVLNode* result = avlTreeSearch(root, target);
115+
if (result) {
116+
std::cout << "Node with value " << result->value << " found." << std::endl;
117+
} else {
118+
std::cout << "Node not found." << std::endl;
119+
}
120+
121+
return 0;
122+
}
123+
124+
</TabItem>
125+
126+
<TabItem value="Java" label="Java">
127+
<SolutionAuthor name="@ngmuraqrdd"/>
128+
```java
129+
class AVLNode {
130+
int value;
131+
AVLNode left, right;
132+
AVLNode(int value) {
133+
this.value = value;
134+
left = right = null;
135+
}
136+
}
137+
138+
public class AVLTreeSearch {
139+
public static AVLNode avlTreeSearch(AVLNode root, int target) {
140+
AVLNode current = root;
141+
while (current != null) {
142+
if (current.value == target) {
143+
return current;
144+
} else if (current.value < target) {
145+
current = current.right;
146+
} else {
147+
current = current.left;
148+
}
149+
}
150+
return null;
151+
}
152+
153+
public static void main(String[] args) {
154+
AVLNode root = new AVLNode(9);
155+
root.left = new AVLNode(5);
156+
root.right = new AVLNode(12);
157+
root.left.left = new AVLNode(2);
158+
root.left.right = new AVLNode(7);
159+
root.right.right = new AVLNode(15);
160+
161+
int target = 7;
162+
AVLNode result = avlTreeSearch(root, target);
163+
if (result != null) {
164+
System.out.println("Node with value " + result.value + " found.");
165+
} else {
166+
System.out.println("Node not found.");
167+
}
168+
}
169+
}
170+
171+
```
172+
</TabItem>
173+
</Tabs>
174+
175+
## Complexity Analysis
176+
177+
- **Time Complexity**:$O(log n)$, where $n$ is the number of nodes in the AVL tree. The height of the tree is kept balanced, leading to logarithmic time complexity.
178+
- **Space Complexity**: $O(1)$, as no extra space is required apart from the input tree.
179+
180+
## Advantages and Disadvantages
181+
182+
**Advantages:**
183+
- Ensures balanced tree structure for efficient search, insert, and delete operations.
184+
- Fast search time due to logarithmic time complexity.
185+
186+
**Disadvantages:**
187+
- Requires additional rotations to maintain balance during insert and delete operations.
188+
- More complex to implement compared to simple binary search trees.
189+
190+
191+
## References
192+
193+
- **GFG Problem:** [GFG Problem](https://www.geeksforgeeks.org/practice-questions-height-balancedavl-tree//)
194+
- **Author's Geeks for Geeks Profile:** [MuraliDharan](https://www.geeksforgeeks.org/user/ngmuraqrdd/)
195+

0 commit comments

Comments
 (0)