C++ program to find the median array for Binary tree
In this article, we will learn how to find the median array for a Binary tree in C++. A median array is an array that formed with help of Inorder, Preorder, Postorder traversal of the binary tree i.e.
median_arr[i] = median(inorder[i], postorder[i], preorder[i])
Example
Input: 8 / \ 1 4 / \ / \ 5 6 5 6 Output: 5 1 5 6 5 4 6 Explanation: Preorder traversal is: {8, 1, 5, 6, 4, 5, 6,} Inorder traversal is: {5, 1, 6, 8, 5, 4, 6} Postorder traversal is: {5, 6, 1, 5, 6, 4, 8} median_arr[0] = median(8, 5, 5) = 5 median_arr[1] = median(1, 1, 6) = 1 median_arr[2] = median(5, 6, 1) = 5 median_arr[3] = median(6, 8, 5) = 6 median_arr[4] = median(4, 5, 6) = 5 median_arr[5] = median(4, 5, 4) = 4 median_arr[6] = median(8, 6, 6) = 6
Median array for Binary tree in C++
1. Create a median_arr vector to store the result.
2. Firstly Declare three vectors and find the preorder, inorder, postorder traversal of the given BST and store them in vector.
3. Create a temporary vector, from o to n store insert values at the position in each traverse into the temporary vector.
4. Sort the temporary vector and the mid element into the median_arr vector.
5. Finally, print the median_arr vector.
#include <bits/stdc++.h> using namespace std; struct Node { int data; struct Node *left, *right; Node(int data) { this->data = data; left = right = NULL; } }; // function to generate the post order traversal void Postorder(Node* node, vector<int>& postorder) { if (node == NULL) return; Postorder(node->left, postorder); Postorder(node->right, postorder); postorder.push_back(node->data); } // function to generate the inorder traversal void Inorder(Node* node, vector<int>& inorder) { if (node == NULL) return; Inorder(node->left, inorder); inorder.push_back(node->data); Inorder(node->right, inorder); } // function to generate the preorder traversal void Preorder(Node* node, vector<int>& preorder) { if (node == NULL) return; preorder.push_back(node->data); Preorder(node->left, preorder); Preorder(node->right, preorder); } // function to print the vector void printArray(vector<int> median_arr) { for (int i = 0; i < median_arr.size(); i++) cout << median_arr[i] << " "; return; } // function to calculate the meadian array void medianArray(Node* node) { // vector to store the result vector<int> median_arr; if (node == NULL) return; // vector to store the traversals vector<int> preorder, postorder, inorder; Postorder(node, postorder); Inorder(node, inorder); Preorder(node, preorder); int n = inorder.size(); for (int i = 0; i < n; i++) { vector<int> temp; temp.push_back(postorder[i]); temp.push_back(inorder[i]); temp.push_back(preorder[i]); sort(temp.begin(), temp.end()); median_arr.push_back(temp[1]); } printArray(median_arr); return; } int main() { struct Node* root = new Node(1); root->left = new Node(2); root->right = new Node(3); root->left->left = new Node(4); root->left->right = new Node(5); root->right->left = new Node(6); root->right->right = new Node(7); medianArray(root); return 0; }
Output
4 2 4 5 6 3 7
Also, read
Leave a Reply