Related Articles
Median of all nodes from a given range in a Binary Search Tree ( BST )
• Difficulty Level : Medium
• Last Updated : 03 May, 2021

Given a Binary Search Tree (BST)consisting of N nodes and two nodes A and B, the task is to find the median of all the nodes in the given BST whose values lie over the range [A, B].

Examples:

Input: A = 3, B = 11

Output: 6
Explanation:
The nodes that lie over the range [3, 11] are {3, 4, 6, 8, 11}. The median of the given nodes is 6.

Input: A = 6, B = 15

Output: 9.5

Approach: The given problem can be solved by performing any tree traversal on the given tree and store all the nodes lies over the range [A, B], and find the median of all the stored element. Follow the steps below to solve the problem:

Below is the implementation of the above approach:

## C++

 `// C++ program for the above approach`` ` `#include ``using` `namespace` `std;`` ` `// Tree Node structure``struct` `Node {``    ``struct` `Node *left, *right;``    ``int` `key;``};`` ` `// Function to create a new BST node``Node* newNode(``int` `key)``{``    ``Node* temp = ``new` `Node;``    ``temp->key = key;``    ``temp->left = temp->right = NULL;``    ``return` `temp;``}`` ` `// Function to insert a new node with``// given key in BST``Node* insertNode(Node* node, ``int` `key)``{``    ``// If the tree is empty,``    ``// return a new node``    ``if` `(node == NULL)``        ``return` `newNode(key);`` ` `    ``// Otherwise, recur down the tree``    ``if` `(key < node->key)``        ``node->left = insertNode(``            ``node->left, key);`` ` `    ``else` `if` `(key > node->key)``        ``node->right = insertNode(``            ``node->right, key);`` ` `    ``// Return the node pointer``    ``return` `node;``}`` ` `// Function to find all the nodes that``// lies over the range [node1, node2]``void` `getIntermediateNodes(``    ``Node* root, vector<``int``>& interNodes,``    ``int` `node1, ``int` `node2)``{``    ``// If the tree is empty, return``    ``if` `(root == NULL)``        ``return``;`` ` `    ``// Traverse for the left subtree``    ``getIntermediateNodes(root->left,``                         ``interNodes,``                         ``node1, node2);`` ` `    ``// If a second node is found,``    ``// then update the flag as false``    ``if` `(root->key <= node2``        ``and root->key >= node1) {``        ``interNodes.push_back(root->key);``    ``}`` ` `    ``// Traverse the right subtree``    ``getIntermediateNodes(root->right,``                         ``interNodes,``                         ``node1, node2);``}`` ` `// Function to find the median of all``// the values in the given BST that``// lies over the range [node1, node2]``float` `findMedian(Node* root, ``int` `node1,``                 ``int` `node2)``{``    ``// Stores all the nodes in``    ``// the range [node1, node2]``    ``vector<``int``> interNodes;`` ` `    ``getIntermediateNodes(root, interNodes,``                         ``node1, node2);`` ` `    ``// Store the size of the array``    ``int` `nSize = interNodes.size();`` ` `    ``// Print the median of array``    ``// based on the size of array``    ``return` `(nSize % 2 == 1)``               ``? (``float``)interNodes[nSize / 2]``               ``: (``float``)(interNodes[(nSize - 1) / 2]``                         ``+ interNodes[nSize / 2])``                     ``/ 2;``}`` ` `// Driver Code``int` `main()``{``    ``// Given BST``    ``struct` `Node* root = NULL;``    ``root = insertNode(root, 8);``    ``insertNode(root, 3);``    ``insertNode(root, 1);``    ``insertNode(root, 6);``    ``insertNode(root, 4);``    ``insertNode(root, 11);``    ``insertNode(root, 15);`` ` `    ``cout << findMedian(root, 3, 11);`` ` `    ``return` `0;``}`
Output:
```6
```

Time Complexity: O(N)
Auxiliary Space: O(N)

Attention reader! Don’t stop learning now. Get hold of all the important mathematical concepts for competitive programming with the Essential Maths for CP Course at a student-friendly price. To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

My Personal Notes arrow_drop_up