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

C++ में ट्री को सम नोड्स के फॉरेस्ट में बदलें


इस ट्यूटोरियल में, हम एक प्रोग्राम पर चर्चा करेंगे जो ट्री को सम नोड्स के फॉरेस्ट में बदलता है।

इसके लिए हमें N नोड्स का एक बाइनरी ट्री दिया जाएगा। हमारा कार्य हटाए जा सकने वाले अधिकतम एज की संख्या की गणना करना है ताकि सम नोड्स का फॉरेस्ट प्राप्त हो सके।

उदाहरण

#include<bits/stdc++.h> 
#define N 12 
using namespace std; 

//रूट नोड वाले सबट्री के नोड्स की संख्या लौटाना
int depth_search(vector tree[N], int visit[N], int* ans, int node) {
    int num = 0, temp = 0;
    //नोड्स को विजिटेड मार्क करना
    visit[node] = 1;
    
    for (int i = 0; i < tree[node].size(); i++) {
        if (visit[tree[node][i]] == 0) {
            //सब-सबट्री के कुल नोड्स ढूंढना
            temp = depth_search(tree, visit, ans, tree[node][i]);
            //यदि नोड्स सम हैं, तो हटाए जाने वाले एज को 1 से बढ़ाएं
            (temp % 2) ? (num += temp) : ((*ans)++);
        }
    }
    return num + 1;
}

//हटाए जाने वाले अधिकतम एज की संख्या लौटाना
int print_maxedge(vector tree[N], int n) {
    int visit[n + 2];
    int ans = 0;
    memset(visit, 0, sizeof visit);
    depth_search(tree, visit, &ans, 1);
    return ans;
}

int main() {
    int n = 10;
    vector tree[n + 2];
    tree[1].push_back(3);
    tree[3].push_back(1);
    tree[1].push_back(6);
    tree[6].push_back(1);
    tree[1].push_back(2);
    tree[2].push_back(1);
    tree[3].push_back(4);
    tree[4].push_back(3);
    tree[6].push_back(8);
    tree[8].push_back(6);
    tree[2].push_back(7);
    tree[7].push_back(2);
    tree[2].push_back(5);
    tree[5].push_back(2);
    tree[4].push_back(9);
    tree[9].push_back(4);
    tree[4].push_back(10);
    tree[10].push_back(4);
    cout << print_maxedge(tree, n) << endl;
    return 0;
}

आउटपुट

2

  1. C++ में ट्री डायमीटर C++ में ट्री डायमीटर

    मान लीजिए हमारे पास एक अनडायरेक्टेड ट्री है; हमें इसका डायमीटर ढूंढना है - उस ट्री में सबसे लंबे पथ में एज की संख्या उस ट्री का डायमीटर है। यहां ट्री को एज लिस्ट के रूप में दिया गया है जहां edges[i] = [u, v] नोड्स u और v के बीच एक बायडायरेक्शनल एज है। प्रत्येक नोड के लेबल सेट {0, 1, ..., edges.lengt

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

    मान लीजिए हमारे पास एक पूर्ण बाइनरी ट्री है, हमें नोड्स की संख्या गिननी है। तो यदि ट्री इस तरह है −तो आउटपुट 6 होगा।इसे हल करने के लिए, हम इन चरणों का पालन करेंगेयह रिकर्सिव दृष्टिकोण का उपयोग करेगा। यह मेथड, countNodes() रूट को आर्गुमेंट के रूप में ले रहा है।hr := 0 और hl := 0दो नोड्स l और r

  1. C++ में बाइनरी सर्च ट्री के सभी सम नोड्स प्रिंट करना C++ में बाइनरी सर्च ट्री के सभी सम नोड्स प्रिंट करना

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