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

C++ में रूट से पथ पर सामान्य नोड्स (या सामान्य पूर्वज) प्रिंट करें


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

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

उदाहरण,

C++ में रूट से पथ पर सामान्य नोड्स (या सामान्य पूर्वज) प्रिंट करें

पूर्वज नोड एक नोड है जो ट्री में निचले स्तर के नोड्स से जुड़ा होता है।

दो नोड्स का सामान्य पूर्वज नोड एक नोड है जो ट्री में दोनों नोड्स का पूर्वज नोड है।

उदाहरण के लिए - C++ में रूट से पथ पर सामान्य नोड्स (या सामान्य पूर्वज) प्रिंट करें

उपरोक्त बाइनरी ट्री में, हमें 0 और 6 का सामान्य पूर्वज ढूंढना है।

आउटपुट - 3, 2

अब, इस समस्या के आधार पर, आइए इस समस्या को हल करने के लिए एक एल्गोरिदम बनाते हैं,

एल्गोरिदम

चरण 1 : दिए गए ट्री के दो नोड्स का निम्नतम सामान्य पूर्वज ढूंढें। और इसे प्रिंट करें। चरण 2 : रूट नोड तक ऊपर की ओर ट्रैवर्स करें और पथ में आने वाले सभी नोड्स को प्रिंट करें।

उदाहरण

अब, आइए इस समस्या के समाधान को दर्शाने वाला एक प्रोग्राम बनाते हैं,

#include <iostream> using namespace std; struct Node {     struct Node* left, *right;     int key; }; Node* insertNode(int key){     Node* temp = new Node;     temp->key = key;     temp->left = temp->right = NULL;     return temp; } struct Node* LowestCommonAncestors(struct Node* root, int n1, int n2){     if (root == NULL)         return NULL;     if (root->key == n1 || root->key == n2)         return root;     Node* left_lca = LowestCommonAncestors(root->left, n1, n2);     Node* right_lca = LowestCommonAncestors(root->right, n1, n2);     if (left_lca && right_lca)         return root;     return (left_lca != NULL) ? left_lca : right_lca; } bool printAncestorNodes(struct Node* root, int target){     if (root == NULL)         return false;     if (root->key == target) {         cout << root->key << "\t";         return true;     }     if (printAncestorNodes(root->left, target) ||     printAncestorNodes(root->right, target)) {         cout << root->key << "\t";         return true;     }     return false; } bool printcommonAncestors(struct Node* root, int first, int second){     struct Node* LCA = LowestCommonAncestors(root, first, second);     if (LCA == NULL)         return false;     printAncestorNodes(root, LCA->key); } int main(){     Node* root = insertNode(24);     root->left = insertNode(8);     root->right = insertNode(69);     root->left->left = insertNode(12);     root->left->right = insertNode(41);     root->right->left = insertNode(50);     root->right->right = insertNode(3);     root->left->left->left = insertNode(22);     root->right->left->left = insertNode(10);     root->right->left->right = insertNode(6);     if (printcommonAncestors(root, 6, 3) == false)         cout << "No Common nodes";     return 0; }

आउटपुट

69 24

  1. C++ में BFS का उपयोग करके दिए गए स्रोत से गंतव्य तक सभी पथ प्रिंट करें C++ में BFS का उपयोग करके दिए गए स्रोत से गंतव्य तक सभी पथ प्रिंट करें

    इस समस्या में हमें एक निर्देशित ग्राफ दिया गया है और हमें ब्रेडथ फर्स्ट सर्च (BFS) का उपयोग करके ग्राफ के स्रोत से गंतव्य तक सभी पथ प्रिंट करने हैं। निर्देशित ग्राफ एक ग्राफ है जिसमें किनारे शीर्ष a से b की ओर निर्देशित होते हैं। समस्या को समझने के लिए एक उदाहरण लेते हैं - स्रोत = K गंतव्य = P आउट

  1. C++ प्रोग्राम: बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में किन्हीं दो नोड्स के बीच पथ प्रिंट करना

    हमें एक बाइनरी ट्री दिया गया है जिसके नोड्स विशिष्ट हैं और उस बाइनरी ट्री के दो नोड्स दिए गए हैं जिनके बीच का पथ हम प्रिंट करना चाहते हैं। उदाहरण के लिए - हम नोड 140 से 211 के बीच का पथ प्रिंट करना चाहते हैं तो इसका आउटपुट होना चाहिए - Output: 140->3->10->211 विचार यह है कि रूट नोड्स से दो

  1. C++ प्रोग्राम: बाइनरी ट्री में पहला सबसे छोटा रूट-टू-लीफ पथ प्रिंट करना C++ प्रोग्राम: बाइनरी ट्री में पहला सबसे छोटा रूट-टू-लीफ पथ प्रिंट करना

    दिए गए बाइनरी ट्री में प्रोग्राम को दिए गए कई पथों में से रूट से लीफ तक का सबसे छोटा पथ ढूंढना होगा। चूंकि हम ट्री को बाएं से दाएं ट्रैवर्स करते हैं, इसलिए यदि रूट से लीफ तक कई सबसे छोटे पथ हैं तो प्रोग्राम ट्री के बाएं तरफ पहले ट्रैवर्स किए गए सबसे छोटे पथ को प्रिंट करेगा। हम एक कतार (queue) का उपय