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

C++ में सभी सबसे गहरे नोड्स वाला सबसे छोटा सबट्री


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

C++ में सभी सबसे गहरे नोड्स वाला सबसे छोटा सबट्री

तो सबसे गहरा सबट्री होगा -

C++ में सभी सबसे गहरे नोड्स वाला सबसे छोटा सबट्री

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

  • solve() नामक एक मेथड परिभाषित करें, यह रूट को इनपुट के रूप में लेगा
  • यदि रूट null है, तो (null, 0) लौटाएं
  • l := solve(रूट का लेफ्ट), r := solve(रूट का राइट)
  • यदि लेफ्ट का सेकंड मान > r का सेकंड मान, तो एक पेयर लौटाएं (l का फर्स्ट, 1 + l का सेकंड)
  • अन्यथा जब लेफ्ट का सेकंड मान < r का सेकंड मान, तो एक पेयर लौटाएं (r का फर्स्ट और 1 + r का सेकंड)
  • एक पेयर लौटाएं (रूट, l का सेकंड + 1)
  • मेन मेथड से solve(रूट) कॉल करें, और इसका सेकंड मान लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्नलिखित इम्प्लीमेंटेशन देखें -

#include <bits/stdc++.h> using namespace std; class TreeNode{    public:       int val;       TreeNode *left, *right;       TreeNode(int data){          val = data;          left = 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; } void tree_level_trav(TreeNode*root){    if (root == NULL) return;    cout << "[";    queue<TreeNode *> q;    TreeNode *curr;    q.push(root);    q.push(NULL);    while (q.size() > 1) {       curr = q.front();       q.pop();       if (curr == NULL){          q.push(NULL);       } else {          if(curr->left)          q.push(curr->left);          if(curr->right)             q.push(curr->right);          if(curr->val == 0 || curr == NULL){             cout << "null" << ", ";          } else {             cout << curr->val << ", ";          }       }    }    cout << "]"<<endl; } class Solution {    public:    pair <TreeNode*, int> solve(TreeNode* root){       if(!root || root->val == 0) return {NULL, 0};       pair <TreeNode*, int> L = solve(root->left);       pair <TreeNode*, int> R = solve(root->right);       if(L.second > R.second)return {L.first, L.second + 1};       else if(L.second < R.second) return {R.first, R.second + 1};       return {root, L.second + 1};    }    TreeNode* subtreeWithAllDeepest(TreeNode* root) {       return solve(root).first;    } }; main(){    vector<int> v = {3,5,1,6,2,0,8,NULL,NULL,7,4};    TreeNode *root = make_tree(v);    Solution ob;    tree_level_trav(ob.subtreeWithAllDeepest(root)) ; }

इनपुट

{3,5,1,6,2,0,8,NULL,NULL,7,4}

आउटपुट

[2,7,4]

  1. C++ में थ्रेशोल्ड दूरी पर सबसे कम पड़ोसियों वाला शहर ढूंढना C++ में थ्रेशोल्ड दूरी पर सबसे कम पड़ोसियों वाला शहर ढूंढना

    मान लीजिए n शहर हैं जो 0 से n-1 तक नंबरेड हैं। अगर हमारे पास ऐरे edges है जहां edges[i] = [fromi, toi, weighti] शहरों fromi और toi के बीच एक बाईडायरेक्शनल और वेटेड एज दर्शाता है, और दिया गया इंटीजर distanceThreshold है। हमें वह शहर ढूंढना है जिसमें उन शहरों की सबसे कम संख्या हो जो किसी पथ के माध्यम

  1. C++ में विषम और सम संख्या में नोड्स वाले सभी स्तर प्रिंट करें C++ में विषम और सम संख्या में नोड्स वाले सभी स्तर प्रिंट करें

    इस समस्या में, हमें एक ट्री दिया गया है। और हमें उन सभी स्तरों को प्रिंट करना है जिनमें सम संख्या में नोड्स और विषम संख्या में नोड्स हैं। अवधारणा को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं आउटपुट - विषम संख्या में नोड्स वाले स्तर: 1, 3, 4 सम संख्या में नोड्स वाले स्तर: 2 व्याख्या - पहले स्तर म

  1. C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें C++ में दिए गए परफेक्ट बाइनरी ट्री के सभी नोड्स का योग ज्ञात करें

    मान लीजिए हमारे पास एक धनात्मक पूर्णांक L है, जो परफेक्ट बाइनरी ट्री में स्तरों की संख्या दर्शाता है। इस परफेक्ट बाइनरी ट्री में पत्ती नोड्स को 1 से n तक संख्या दी गई है। जहां n पत्ती नोड्स की संख्या है। पैरेंट नोड बच्चों का योग है। हमारा कार्य इस परफेक्ट बाइनरी ट्री के सभी नोड्स का योग प्रिंट करने