ধরুন আমাদের একটি প্রি অর্ডার ট্রাভার্সাল আছে। এই ট্রাভার্সাল থেকে. আমাদের গাছ তৈরি করতে হবে তাই যদি ট্রাভার্সাল হয় [10, 5, 1, 7, 40, 50], তাহলে গাছটি হবে −
এটি সমাধান করার জন্য, আমরা এই কৌশলটি ব্যবহার করব। কৌশলটি হল প্রতিটি নোডের জন্য একটি পরিসর {মিনিট… সর্বোচ্চ} সেট করা। প্রথমে আমরা পরিসরটিকে {INT_MIN… INT_MAX} হিসাবে শুরু করব৷ প্রথম নোডটি অবশ্যই রেঞ্জের মধ্যে থাকবে, তাই এর পরে আমরা রুট নোড তৈরি করব। বাম সাবট্রি তৈরি করতে, পরিসরটিকে {INT_MIN… root->data} হিসাবে সেট করুন৷ যদি একটি মান {INT_MIN… রুট->ডেটা} পরিসরে থাকে, তাহলে মানটি বাম সাবট্রির অংশ। সঠিক সাবট্রি তৈরি করতে, পরিসরটিকে {root->data… max… INT_MAX} হিসেবে সেট করুন।
উদাহরণ
#include <iostream> using namespace std; class node { public: int data; node *left; node *right; }; node* getNode (int data) { node* temp = new node(); temp->data = data; temp->left = temp->right = NULL; return temp; } node* makeTreeUtil( int pre[], int* preord_index, int key, int min, int max, int size ) { if( *preord_index >= size ) return NULL; node* root = NULL; if( key > min && key < max ){ root = getNode( key ); *preord_index += 1; if (*preord_index < size){ root->left = makeTreeUtil( pre, preord_index, pre[*preord_index], min, key, size ); root->right = makeTreeUtil( pre, preord_index, pre[*preord_index],key, max, size ); } } return root; } node *makeTree (int pre[], int size) { int preord_index = 0; return makeTreeUtil( pre, &preord_index, pre[0], INT_MIN, INT_MAX, size ); } void inord (node* node) { if (node == NULL) return; inord(node->left); cout << node->data << " "; inord(node->right); } int main () { int pre[] = {10, 5, 1, 7, 40, 50}; int size = sizeof( pre ) / sizeof( pre[0] ); node *root = makeTree(pre, size); cout << "Inorder traversal: "; inord(root); }
আউটপুট
Inorder traversal: 1 5 7 10 40 50