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

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

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

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

उदाहरण,

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

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

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

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

उपरोक्त बाइनरी ट्री में, हमें 0 और 6 के उभयनिष्ठ पूर्वज का पता लगाना है।

आउटपुट -3, 2

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

एल्गोरिदम

Step 1 : Find the lowest common ancestor of the two nodes of the given tree. And print it.
Step 2 : Traverse upward to the root node and print all the nodes that come in the path.

उदाहरण

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

#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 का उपयोग करके प्रिंट करें

    इस समस्या में हमें एक निर्देशित ग्राफ़ दिया जाता है और हमें Breadth First Search (BFS) का उपयोग करके स्रोत से ग्राफ़ के गंतव्य तक के सभी पथों को प्रिंट करना होता है। निर्देशित ग्राफ़ किनारों के साथ एक ग्राफ है जो शीर्ष a से b तक निर्देशित होता है। समस्या को समझने के लिए एक उदाहरण लेते हैं -

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

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

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

    बाइनरी ट्री को देखते हुए प्रोग्राम को दिए गए कई रास्तों में से रूट से लीफ तक के सबसे छोटे रास्ते का पता लगाना चाहिए। चूँकि हम पेड़ को बाएँ से दाएँ पार करते हैं, इसलिए यदि जड़ से पत्ती तक कई छोटे रास्ते हैं, तो प्रोग्राम पेड़ के बाईं ओर सबसे छोटा रास्ता सबसे पहले ट्रैवर्स करेगा। हम एक कतार का उपयोग