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

C++ में बाइनरी ट्री में चचेरे भाई

मान लीजिए कि हमारे पास एक बाइनरी ट्री है, रूट नोड 0 की गहराई पर मौजूद है, और प्रत्येक गहराई k नोड के बच्चे गहराई k+1 पर हैं।

यहां एक बाइनरी ट्री के दो नोड्स को चचेरे भाई कहा जाता है यदि उनकी गहराई समान है, लेकिन उनके माता-पिता अलग हैं।

पेड़ के सभी मूल्य अद्वितीय होंगे, और पेड़ में दो अलग-अलग नोड्स के मान x और y होंगे। हमें यह जांचना होगा कि x और y के मानों के अनुरूप नोड चचेरे भाई हैं या नहीं।

तो, अगर इनपुट पसंद है

C++ में बाइनरी ट्री में चचेरे भाई

x =5, y =4, तो आउटपुट सही होगा

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • एक नक्शा उम परिभाषित करें

  • एक कतार को परिभाषित करें q

  • q में रूट डालें

  • उम [एक्स]:=उम [वाई]:=शून्य

  • जबकि (नहीं q खाली है), करें -

    • qSize :=q का आकार

    • जबकि qSize> 0 तब (qSize को 1 से घटाएं), −

      . करें
      • cur :=q का पहला तत्व

      • q से तत्व हटाएं

      • यदि बाईं ओर कर्व मौजूद है, तो -

        • यदि उम में वक्र के बाईं ओर का मान है, तो

          • उम [कर के बाईं ओर का मान] :=वक्र

        • अन्यथा

          • क्यू में बाईं ओर डालें q

        • अगर उम में वक्र के अधिकार का मूल्य है, तो

          • उम [वक्र के अधिकार का मूल्य] :=वक्र

        • अन्यथा

          • क्यू में दायीं ओर डालें

      • अगर um[x] या um[y] गैर-शून्य है, तो -

        • यदि um[x] 0 है या um[y] 0 है या um[x] um[y] के समान है, तो -

          • झूठी वापसी

        • अन्यथा

          • सही लौटें

  • झूठी वापसी

उदाहरण

आइए एक बेहतर समझ प्राप्त करने के लिए निम्नलिखित कार्यान्वयन देखें -

#include <bits/stdc++.h>
using namespace std;
class TreeNode {
public:
   int val;
   TreeNode *left, *right;
   TreeNode(int data) {
      val = data;
      left = NULL;
      right = NULL;
   }
};
class Solution {
public:
   bool isCousins(TreeNode *root, int x, int y) {
      unordered_map<int, TreeNode *> um;
      queue<TreeNode *> q;
      q.push(root);
      um[x] = um[y] = NULL;
      while (!q.empty()) {
         int qSize = q.size();
         while (qSize-- > 0) {
            auto cur = q.front();
            q.pop();
            if (cur->left && cur->left->val != 0)
               if (um.count(cur->left->val))
                  um[cur->left->val] = cur;
               else
                  q.push(cur->left);
            if (cur->right && cur->right->val != 0)
               if (um.count(cur->right->val))
                  um[cur->right->val] = cur;
               else
                  q.push(cur->right);
         }
         if (um[x] or um[y])
            if (!um[x] or !um[y] or um[x] == um[y])
               return false;
            else
               return true;
      }
      return false;
   }
};
main() {
   Solution ob;
   TreeNode *root = new TreeNode(1);
   root->left = new TreeNode(2); root->right = new TreeNode(3);
   root->left->right = new TreeNode(4); root->right->right = new TreeNode(5);
   cout << (ob.isCousins(root, 5, 4));
}

इनपुट

TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2); root->right = new TreeNode(3);
root->left->right = new TreeNode(4); root->right->right = new
TreeNode(5);
cout << (ob.isCousins(root, 5, 4));

आउटपुट

1

  1. C++ में बाइनरी ट्री प्रूनिंग

    मान लीजिए कि हमारे पास एक बाइनरी ट्री का हेड नोड रूट है, जहां अतिरिक्त रूप से प्रत्येक नोड का मान या तो 0 या 1 है। हमें वही ट्री ढूंढना है जहां प्रत्येक सबट्री जिसमें 1 नहीं है, को हटा दिया गया है। तो अगर पेड़ जैसा है - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक पुनरावर्ती विधि को

  1. C++ में अधिकतम बाइनरी ट्री

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी है। उस सरणी के सभी तत्व अद्वितीय हैं। इस सरणी पर अधिकतम वृक्ष निर्माण को निम्नानुसार परिभाषित किया गया है - जड़ सरणी में अधिकतम संख्या धारण करेगा। लेफ्ट सबट्री सबएरे के बायीं ओर से निर्मित अधिकतम ट्री है जिसे अधिकतम संख्या से विभाजित किया जाता है। दाय

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

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