From d18c8dae9572680496833b81b0af68b2dbb1028e Mon Sep 17 00:00:00 2001 From: Maheshwari Love Date: Sun, 16 Jun 2024 12:55:00 +0530 Subject: [PATCH 1/2] addded AVL search algorithm --- assets/Avl-Tree.png | Bin 0 -> 27324 bytes .../05-AVL-Tree-Search.md | 196 ++++++++++++++++++ 2 files changed, 196 insertions(+) create mode 100644 assets/Avl-Tree.png create mode 100644 dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md diff --git a/assets/Avl-Tree.png b/assets/Avl-Tree.png new file mode 100644 index 0000000000000000000000000000000000000000..b7e8dad9e2b219f738c6ceda29925988e2ced4a4 GIT binary patch literal 27324 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 literal 0 HcmV?d00001 diff --git a/dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md b/dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md new file mode 100644 index 000000000..425d16a14 --- /dev/null +++ b/dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md @@ -0,0 +1,196 @@ +--- +id: AVL-Tree-Search +title: AVL Tree Search (Geeks for Geeks) +sidebar_label: AVL Tree Search +tags: + - Beginner + - Search Algorithms + - Geeks for Geeks + - CPP + - Python + - Java + - JavaScript + - DSA +description: "This is a solution to the AVL Tree Search problem on Geeks for Geeks." +--- + +## What is AVL Tree Search? + +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. + +## Algorithm for AVL Tree Search + +1. Start at the root node of the AVL tree. +2. Compare the target value with the value of the current node: +- If the target value equals the current node's value, return the node. +- If the target value is less than the current node's value, move to the left child. +- If the target value is greater than the current node's value, move to the right child. +3. Repeat step 2 until the target value is found or the current node becomes null. +4. If the target value is not found, return null. + +## How does AVL Tree Search work? + +- It begins by comparing the target value to the value of the root node. +- If the target value matches the root node's value, the search is complete. +- If the target value is less than the root node's value, the search continues in the left subtree. +- If the target value is greater than the root node's value, the search continues in the right subtree. +- This process continues until the target value is found or a leaf node is reached without finding the target value. + +![Example for AVL Tree Search(GFG)](../../assets/Avl-Tree.png) + +## Problem Description + +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. + +## Examples + +**Example 1:** +``` +Input: +AVL Tree: + 9 + / \ + 5 12 + / \ \ + 2 7 15 + +Target: 7 +Output: Node with value 7 + +``` + +## Your Task: + +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. + +Expected Time Complexity: $O(LogN)$ +Expected Auxiliary Space: $O(1)$ + +## Constraints + +- $1 <= Number of nodes <= 10^5$ +- $1 <= Node value <= 10^6$ +- $1 <= Target value <= 10^6$ + +## Implementation + + + + + + ```cpp + #include + +struct AVLNode { + int value; + AVLNode* left; + AVLNode* right; + AVLNode(int val) : value(val), left(nullptr), right(nullptr) {} +}; + +AVLNode* avlTreeSearch(AVLNode* root, int target) { + AVLNode* current = root; + while (current) { + if (current->value == target) { + return current; + } else if (current->value < target) { + current = current->right; + } else { + current = current->left; + } + } + return nullptr; +} + +int main() { + AVLNode* root = new AVLNode(9); + root->left = new AVLNode(5); + root->right = new AVLNode(12); + root->left->left = new AVLNode(2); + root->left->right = new AVLNode(7); + root->right->right = new AVLNode(15); + + int target = 7; + AVLNode* result = avlTreeSearch(root, target); + if (result) { + std::cout << "Node with value " << result->value << " found." << std::endl; + } else { + std::cout << "Node not found." << std::endl; + } + + return 0; +} + + + + + + ```java + class AVLNode { + int value; + AVLNode left, right; + AVLNode(int value) { + this.value = value; + left = right = null; + } +} + +public class AVLTreeSearch { + public static AVLNode avlTreeSearch(AVLNode root, int target) { + AVLNode current = root; + while (current != null) { + if (current.value == target) { + return current; + } else if (current.value < target) { + current = current.right; + } else { + current = current.left; + } + } + return null; + } + + public static void main(String[] args) { + AVLNode root = new AVLNode(9); + root.left = new AVLNode(5); + root.right = new AVLNode(12); + root.left.left = new AVLNode(2); + root.left.right = new AVLNode(7); + root.right.right = new AVLNode(15); + + int target = 7; + AVLNode result = avlTreeSearch(root, target); + if (result != null) { + System.out.println("Node with value " + result.value + " found."); + } else { + System.out.println("Node not found."); + } + } +} + + + ``` + + + +## Complexity Analysis + +- **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. +- **Space Complexity**: $O(1)$, as no extra space is required apart from the input tree. + +## Advantages and Disadvantages + +**Advantages:** +- Ensures balanced tree structure for efficient search, insert, and delete operations. +- Fast search time due to logarithmic time complexity. + +**Disadvantages:** +- Requires additional rotations to maintain balance during insert and delete operations. +- More complex to implement compared to simple binary search trees. + + +## References + +- **GFG Problem:** [GFG Problem](https://www.geeksforgeeks.org/practice-questions-height-balancedavl-tree//) +- **Author's Geeks for Geeks Profile:** [MuraliDharan](https://www.geeksforgeeks.org/user/ngmuraqrdd/) + From c38b89662d7b45babdac4836ae50d600e291b441 Mon Sep 17 00:00:00 2001 From: Ajay Dhangar <99037494+Ajay-Dhangar@users.noreply.github.com> Date: Mon, 17 Jun 2024 18:02:23 +0530 Subject: [PATCH 2/2] Update 05-AVL-Tree-Search.md --- dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md b/dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md index 425d16a14..08781c397 100644 --- a/dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md +++ b/dsa-solutions/Searching-Algorithms/05-AVL-Tree-Search.md @@ -1,5 +1,5 @@ --- -id: AVL-Tree-Search +id: avl-tree-search title: AVL Tree Search (Geeks for Geeks) sidebar_label: AVL Tree Search tags: @@ -168,9 +168,8 @@ public class AVLTreeSearch { } } - - ``` - + ``` + ## Complexity Analysis