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

C++ . में सतत वृक्ष

एक कंटीन्यूअस ट्री को एक ऐसे पेड़ के रूप में परिभाषित किया जाता है जिसमें रूट नोड से लीफ नोड तक किसी भी पथ के साथ नोड्स का मान या वजन होता है जैसे कि पैरेंट नोड और उसके सभी डायरेक्टचिल्ड्रन नोड्स के बीच पूर्ण अंतर हमेशा 1 होता है।

अगर हम जड़ से पत्ती तक के रास्ते में कोई नोड चुनते हैं, तो

|बाएं बच्चे के नोड के नोड-वजन का वजन|=|बाएं बच्चे के नोड का वजन-नोड का वजन| =1, यह सही बच्चे के लिए भी सही है

|राइट चाइल्ड नोड के नोड-वेट का वजन|=|वेट लोफ राइट चाइल्ड नोड-नोड का वजन| =1

आरेख

C++ . में सतत वृक्ष

आइए उदाहरणों से समझते हैं।

नीचे दिया गया पेड़ निरंतर है क्योंकि माता-पिता नोड्स और उनके बच्चे के बीच पूर्ण अंतर हमेशा 1 होता है।

C++ . में सतत वृक्ष

नीचे दिया गया वृक्ष एक सतत वृक्ष होने के योग्य नहीं है।

C++ . में सतत वृक्ष

एल्गोरिदम यह पता लगाने के लिए कि क्या पेड़ निरंतर है

  • अगर रूट न्यूल है, तो 1

    . लौटाएं
  • यदि यह एक लीफ नोड है, तो 1 लौटाएं क्योंकि ट्री कंटीन्यूअस रहा है इसलिए लीफ नोड तक पहुंच गया है।

  • यदि बायां उपट्री खाली है तो दाएं बच्चे के साथ वर्तमान नोड की निरंतरता की जांच करें (वजन के पूर्ण अंतर की गणना करें) और दाएं उपट्री के लिए पुनरावर्ती रूप से जारी रखें।

  • यदि दायां उपट्री खाली है, तो बाएं बच्चे के साथ वर्तमान नोड की निरंतरता की जांच करें (वजन के पूर्ण अंतर की गणना करें) और बाएं उपट्री के लिए पुनरावर्ती रूप से जारी रखें।

  • अन्यथा बाएं और दाएं बच्चे के वजन के साथ पूर्ण अंतर की गणना करें और बाएं और दाएं उप-वृक्षों के लिए पुनरावर्ती रूप से जारी रखें।

स्यूडोकोड

// Function to check tree is continuous or not
struct btreeNode{
   int data;
   btreeNode* left, * right;
};
int isContinuous(btreeNode *root){
   // if node is NULL return 1, exit condition
   if (root == NULL)
      return 1;
   //if leaf node is reached then tree must be continous during this path
   if (root->left == NULL && root->right == NULL)
      return 1;
   // if no left child
   if (root->left == NULL)
      return (abs(root->data - root->right->data) == 1) && isContinuous(root->right);
   // if no right child
   if (root->right == NULL)
      return (abs(root->data - root->left->data) == 1) && isContinuous(root->left);
      // calculate absoute difference
      return abs(root->data - root->left->data)==1 && abs(root->data - root->right->data)==1 &&
   isContinuous(root->left) && isContinuous(root->right);
}

  1. C++ में एक बाइनरी ट्री के दो नोड्स के बीच की दूरी का पता लगाएं

    मान लें कि हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें दो नोड्स u और v के बीच की दूरी ज्ञात करनी है। मान लीजिए कि पेड़ नीचे जैसा है - अब (4, 6) =4 के बीच की दूरी, पथ की लंबाई 4 है, (5, 8) के बीच की लंबाई =5 आदि। इस समस्या को हल करने के लिए, हम एलसीए (सबसे कम सामान्य पूर्वज) ढूंढेंगे, फिर

  1. C++ में एक बाइनरी ट्री में चिल्ड्रन सम प्रॉपर्टी की जाँच करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है। बाइनरी ट्री तब मान्य होता है जब वह निम्नलिखित गुणों से मिलता है। प्रत्येक नोड में बाएँ और दाएँ बच्चों के मानों के योग के समान डेटा मान होना चाहिए। अगर किसी भी तरफ बच्चे नहीं हैं, तो इसे 0 माना जाएगा। मान लीजिए नीचे की तरह एक पेड़ मौजूद है, जो दिए गए गुण स

  1. सी ++ में एक बाइनरी पेड़ के एंटी क्लॉकवाइज सर्पिल ट्रैवर्सल?

    एक बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल एक पेड़ के तत्वों को इस तरह से ट्रेस कर रहा है कि अगर ट्रैवर्स किया जाए तो वे एक सर्पिल बनाते हैं लेकिन उल्टे क्रम में। निम्न चित्र दिखाता है कि बाइनरी ट्री का घड़ी की विपरीत दिशा में सर्पिल ट्रैवर्सल कैसे होता है। बाइनरी ट्री के सर्पिल ट्रैवर्सल