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

सी ++ में बाइनरी ट्री में नोड के पूर्ववर्ती पूर्ववर्ती

इस समस्या में, हमें एक बाइनरी ट्री और एक नोड मान दिया जाता है। हमारा काम नोड के पूर्व-आदेश को प्रिंट करना है।

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

ट्रैवर्सल अग्रिम-आदेश पेड़ के नोड्स को पार करने का एक तरीका है। इसमें हम पहले रूट नोड, फिर लेफ्ट चाइल्ड और फिर राइट चाइल्ड को ट्रेस करेंगे।

पूर्ववर्ती नोड का अग्रिम-आदेश दें वह नोड है जो नोड के प्रीऑर्डर ट्रैवर्सल में नोड से पहले आता है।

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

सी ++ में बाइनरी ट्री में नोड के पूर्ववर्ती पूर्ववर्ती

Input: 1
Output: 9

इस समस्या को हल करने के लिए, एक नौसेना दृष्टिकोण बाइनरी ट्री के प्रीऑर्डर ट्रैवर्सल को खोजने और फिर दिए गए नंबर के बाद आने वाले तत्व को प्रिंट करने का होगा।

एक अधिक प्रभावी समाधान में दी गई संख्या की स्थिति की जांच करना और फिर पदों के आधार पर इसके पूर्ववर्ती की खोज करना शामिल होगा। यदि नोड रूट नोड है, तो NULL लौटाएं, कोई पूर्ववर्ती नहीं। यदि नोड दायाँ बच्चा है, तो बायाँ बच्चा पूर्ववर्ती होगा।

समाधान के कार्यान्वयन को दिखाने के लिए कार्यक्रम

उदाहरण

#include <iostream>
using namespace std;
struct Node {
   struct Node *left, *right, *parent;
   int key;
};
struct Node* insertNode(int key){
   Node* temp = new Node;
   temp->left = temp->right = temp->parent = NULL;
   temp->key = key;
   return temp;
}
Node* preOrderPredecessorNode(Node* root, Node* n){
   if (n == root)
      return NULL;
   Node* parent = n->parent;
   if (parent->left == NULL || parent->left == n)
      return parent;
   Node* curr = parent->left;
   while (curr->right != NULL)
      curr = curr->right;
   return curr;
}
int main() {
   Node* root = insertNode(99);
   root->parent = NULL;
   root->left = insertNode(4);
   root->left->parent = root;
   root->left->left = insertNode(18);
   root->left->left->parent = root->left;
   root->left->right = insertNode(50);
   root->left->right->parent = root->left;
   root->right = insertNode(26);
   root->right->parent = root;
   root->right->left = insertNode(5);
   root->right->left->parent = root->right;
   root->right->right = insertNode(10);
   root->right->right->parent = root->right;
   Node* preOrderPredecessor = preOrderPredecessorNode(root, root->left->right);
   if (preOrderPredecessor)
      cout<<"Preorder Predecessor of "<<root->left->right->key<<" is "<<preOrderPredecessor->key;
   else
      cout<<"Preorder Predecessor of "<<root->left->right->key<<" is NULL";
   return 0;
}

आउटपुट

Preorder Predecessor of 50 is 18

  1. सी++ में बाइनरी ट्री में नोड का पोस्टऑर्डर उत्तराधिकारी

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

  1. C++ में बाइनरी ट्री में नोड का प्रीऑर्डर उत्तराधिकारी

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

  1. पायथन में बाइनरी ट्री प्रीऑर्डर ट्रैवर्सल

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें उस पेड़ के प्रीऑर्डर ट्रैवर्सल को वापस करना होगा। तो अगर पेड़ जैसा है - फिर प्रीऑर्डर ट्रैवर्सल होगा:[3,9,20,15,7] इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - रिक्त सूचियां बनाएं जिन्हें रेस और सेंट कहा जाता है। नोड:=रूट जबकि नोड या सेंट खाली