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

C++ में बाइनरी ट्री में सूडो-पैलिंड्रोमिक पथ


मान लीजिए हमारे पास एक बाइनरी ट्री है जहां नोड मान 1 से 9 तक के अंक हैं। बाइनरी ट्री में एक पथ को सूडो-पैलिंड्रोमिक कहा जाता है जब पथ में नोड मानों का कम से कम एक क्रमचय एक पैलिंड्रोम होता है। हमें रूट नोड से लीफ नोड्स तक जाने वाले सूडो-पैलिंड्रोमिक पथ की संख्या ढूंढनी है।

इसलिए, यदि इनपुट है

C++ में बाइनरी ट्री में सूडो-पैलिंड्रोमिक पथ

तो आउटपुट 2 होगा, क्योंकि रूट नोड से लीफ नोड्स तक जाने वाले तीन पथ हैं - लाल पथ [2,3,3] का अनुसरण करता है, हरा पथ [2,1,1] का अनुसरण करता है, और पथ [2,3,1]। इन पथों में केवल लाल पथ और हरा पथ सूडो-पैलिंड्रोमिक हैं क्योंकि लाल पथ [2,3,3] को [3,2,3] के रूप में पुनर्व्यवस्थित किया जा सकता है और हरा पथ [2,1,1] को [1,2,1] के रूप में पुनर्व्यवस्थित किया जा सकता है।

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

  • एक फ़ंक्शन ok() परिभाषित करें, जो एक ऐरे v लेगा,

  • odd := 0

  • v के प्रत्येक एलिमेंट it के लिए -

    • odd := odd + (it AND 1)

  • true लौटाएं जब odd 0 हो OR odd 1 हो, अन्यथा false

  • एक फ़ंक्शन dfs() परिभाषित करें, जो node, ऐरे v लेगा,

  • यदि node null है, तो -

    • लौटें

  • v[node के मान] को 1 से बढ़ाएं

  • यदि node का बायाँ भाग null है और दायाँ भाग null है, तो -

    • यदि ok(v) true है, तो -

      • (ret को 1 से बढ़ाएं)

    • v[node के मान] को 1 से घटाएं

    • लौटें

  • dfs(node का बायाँ भाग, v)

  • dfs(node का दायाँ भाग, v)

  • v[node के मान] को 1 से घटाएं

  • मुख्य विधि से, निम्न करें -

  • ret := 0

  • आकार 10 का एक ऐरे cnt परिभाषित करें

  • dfs(root, cnt)

  • ret लौटाएं

उदाहरण

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

#include <bits/stdc++.h> using namespace std; class TreeNode{ public:    int val;    TreeNode *left, *right;    TreeNode(int data){       val = data;       left = NULL;       right = NULL;    } }; void insert(TreeNode **root, int val){    queue<TreeNode*> q;    q.push(*root);    while(q.size()){       TreeNode *temp = q.front();       q.pop();       if(!temp->left){          if(val != NULL)             temp->left = new TreeNode(val);          else             temp->left = new TreeNode(0);          return;       }       else{          q.push(temp->left);       }       if(!temp->right){          if(val != NULL)             temp->right = new TreeNode(val);          else             temp->right = new TreeNode(0);          return;       }       else{          q.push(temp->right);       }    } } TreeNode *make_tree(vector<int> v){    TreeNode *root = new TreeNode(v[0]);    for(int i = 1; i<v.size(); i++){       insert(&root, v[i]);    }    return root; } class Solution { public:    int ret;    bool ok(vector <int>& v){       int odd = 0;       for (auto& it : v) {          odd += it & 1;       }       return odd == 0 || odd == 1;    }    void dfs(TreeNode* node, vector <int>& v){       if (!node)          return;       v[node->val]++;       if (!node->left && !node->right) {          if (ok(v))             ret++;          v[node->val]--;          return;       }       dfs(node->left, v);       dfs(node->right, v);       v[node->val]--;    }    int pseudoPalindromicPaths (TreeNode* root) {       ret = 0;       vector<int> cnt(10);       dfs(root, cnt);       return ret;    } }; main(){    Solution ob;    vector<int> v = {2,3,1,3,1,NULL,1};    TreeNode *root = make_tree(v);    cout << (ob.pseudoPalindromicPaths(root)); }

इनपुट

{2,3,1,3,1,NULL,1}

आउटपुट

2

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

    मान लीजिए हमारे पास एक पूर्णांक सरणी है जिसके सभी तत्व अद्वितीय हैं। एक अधिकतम बाइनरी ट्री निम्न नियमों से बनता है: रूट सरणी का अधिकतम तत्व होता है। बायाँ सबट्री अधिकतम तत्व के बाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है। दायाँ सबट्री अधिकतम तत्व के दाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है।

  1. C++ में बाइनरी ट्री में सभी K-सम पाथ प्रिंट करना C++ में बाइनरी ट्री में सभी K-सम पाथ प्रिंट करना

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

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

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