Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

C++ में बाइनरी ट्री टू बाइनरी सर्च ट्री रूपांतरण


एक बाइनरी ट्री एक विशेष प्रकार का पेड़ है जिसमें पेड़ के प्रत्येक नोड में अधिकतम दो बच्चे नोड हो सकते हैं। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के रूप में जाना जाता है।

एक साधारण बाइनरी ट्री है -

C++ में बाइनरी ट्री टू बाइनरी सर्च ट्री रूपांतरण

बाइनरी सर्च ट्री (BST) एक विशेष प्रकार का वृक्ष है जो निम्नलिखित नियमों का पालन करता है -

  • लेफ्ट चाइल्ड नोड का मान हमेशा पैरेंट नोट से कम होता है

  • दाएँ चाइल्ड नोड का मान पैरेंट नोड से ज़्यादा होता है।

  • सभी नोड्स व्यक्तिगत रूप से एक बाइनरी सर्च ट्री बनाते हैं।

बाइनरी सर्च ट्री (BST) का उदाहरण -

C++ में बाइनरी ट्री टू बाइनरी सर्च ट्री रूपांतरण

खोज, न्यूनतम और अधिकतम खोजें जैसे कार्यों की जटिलता को कम करने के लिए एक बाइनरी सर्च ट्री बनाया जाता है।

यहाँ, हमें एक बाइनरी ट्री दिया गया है और हमें इस बाइनरी ट्री को कन्वर्ट करना है (BT) बाइनरी सर्च ट्री के लिए (BST) . इस रूपांतरण में, बाइनरी ट्री की मूल संरचना को नहीं बदला जाना चाहिए।

आइए एक उदाहरण लेते हैं यह समझने के लिए कि BT को BST में कैसे परिवर्तित करें -

इनपुट - C++ में बाइनरी ट्री टू बाइनरी सर्च ट्री रूपांतरण

आउटपुट - C++ में बाइनरी ट्री टू बाइनरी सर्च ट्री रूपांतरण

बाइनरी ट्री का बाइनरी सर्च ट्री में रूपांतरण तीन चरणों का उपयोग करके होता है। वे हैं -

चरण 1 - डेटा को बाइनरी ट्री के सरणी में ट्रैवर्सल के क्रम में संग्रहीत करें arr[]

चरण 2 - किसी भी छँटाई तकनीक का उपयोग करके सरणी arr[] को क्रमबद्ध करें।

चरण 3 - अब, पेड़ का इनऑर्डर ट्रैवर्सल करें और एक सरणी के तत्वों को एक-एक करके पेड़ के नोड्स में कॉपी करें।

उदाहरण

#include<stdio.h>
#include<stdlib.h>
struct node{
   int data;
   struct node *left;
   struct node *right;
};
void Inordertraversal(struct node* node, int inorder[], int *index_ptr){
   if (node == NULL)
      return;
   Inordertraversal(node->left, inorder, index_ptr);
   inorder[*index_ptr] = node->data;
   (*index_ptr)++;
   Inordertraversal(node->right, inorder, index_ptr);
}
int countNodes(struct node* root){
   if (root == NULL)
      return 0;
   return countNodes (root->left) +
   countNodes (root->right) + 1;
}
int compare (const void * a, const void * b){
   return( *(int*)a - *(int*)b );
}
void arrayToBST (int *arr, struct node* root, int *index_ptr){
   if (root == NULL)
      return;
   arrayToBST (arr, root->left, index_ptr);
   root->data = arr[*index_ptr];
   (*index_ptr)++;
   arrayToBST (arr, root->right, index_ptr);
}
struct node* newNode (int data){
   struct node *temp = new struct node;
   temp->data = data;
   temp->left = NULL;
   temp->right = NULL;
   return temp;
}
void printInorder (struct node* node){
   if (node == NULL)
      return;
   printInorder (node->left);
   printf("%d ", node->data);
   printInorder (node->right);
}
int main(){
   struct node *root = NULL;
   root = newNode(17);
   root->left = newNode(14);
   root->right = newNode(2);
   root->left->left = newNode(11);
   root->right->right = newNode(7);
   printf("Inorder Traversal of the binary Tree: \n");
   printInorder (root);
   int n = countNodes(root);
   int *arr = new int[n];
   int i = 0;
   Inordertraversal(root, arr, &i);
   qsort(arr, n, sizeof(arr[0]), compare);
   i = 0;
   arrayToBST (arr, root, &i);
   delete [] arr;
   printf("\nInorder Traversal of the converted BST: \n");
   printInorder (root);
   return 0;
}

आउटपुट

Inorder Traversal of the binary Tree:
11 14 17 2 7
Inorder Traversal of the converted BST:
2 7 11 14 17

  1. C++ में बाइनरी सर्च ट्री में डालें

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हमें केवल एक विधि लिखनी है, जो एक पैरामीटर के रूप में दिए गए नोड के साथ सम्मिलन ऑपरेशन करती है। हमें यह ध्यान रखना होगा कि ऑपरेशन के बाद पेड़ बीएसटी भी रहेगा। तो अगर पेड़ जैसा है - अगर हम 5 डालें, तो पेड़ होगा - इसे हल करने के लिए, हम इन चरणों का

  1. C++ में बाइनरी सर्च ट्री इटरेटर

    मान लीजिए हम बाइनरी ट्री के लिए एक इटरेटर बनाना चाहते हैं। दो तरीके होंगे। अगला () विधि अगले तत्व को वापस करने के लिए है, और hasNext () विधि बूलियन मान वापस करने के लिए है, जो इंगित करेगा कि अगला तत्व मौजूद है या नहीं। तो अगर पेड़ जैसा है - और फ़ंक्शन कॉल का क्रम [अगला (), अगला (), है नेक्स्ट (),

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

    द्विआधारी खोज, जिसे अर्ध-अंतराल खोज, लॉगरिदमिक खोज या बाइनरी चॉप के रूप में भी जाना जाता है, एक खोज एल्गोरिथ्म है जो एक क्रमबद्ध सरणी के भीतर लक्ष्य मान की स्थिति का पता लगाता है। बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है। यदि वे समान नहीं हैं, तो आधा जिसमें लक्ष्य झूठ नहीं बोल सकत