#include <bits/stdc++.h>
using namespace std;
  
struct Node {
    struct Node *left, *right;
    int key;
};
  
Node* newNode(int key)
{
    Node* temp = new Node;
    temp->key = key;
    temp->left = temp->right = NULL;
    return temp;
}
  
Node* insertNode(Node* node, int key)
{
    
    
    if (node == NULL)
        return newNode(key);
  
    
    if (key < node->key)
        node->left = insertNode(
            node->left, key);
  
    else if (key > node->key)
        node->right = insertNode(
            node->right, key);
  
    
    return node;
}
  
void getIntermediateNodes(
    Node* root, vector<int>& interNodes,
    int node1, int node2)
{
    
    if (root == NULL)
        return;
  
    
    getIntermediateNodes(root->left,
                         interNodes,
                         node1, node2);
  
    
    
    if (root->key <= node2
        and root->key >= node1) {
        interNodes.push_back(root->key);
    }
  
    
    getIntermediateNodes(root->right,
                         interNodes,
                         node1, node2);
}
  
float findMedian(Node* root, int node1,
                 int node2)
{
    
    
    vector<int> interNodes;
  
    getIntermediateNodes(root, interNodes,
                         node1, node2);
  
    
    int nSize = interNodes.size();
  
    
    
    return (nSize % 2 == 1)
               ? (float)interNodes[nSize / 2]
               : (float)(interNodes[(nSize - 1) / 2]
                         + interNodes[nSize / 2])
                     / 2;
}
  
int main()
{
    
    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;
}
Original page link
Best Cool Tech Gadgets
Top favorite technology gadgets
 
 
 
 
0 comments:
Post a Comment