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

सी ++ पथ लंबाई जिसमें अधिकतम संख्या में मोड़ हैं

एक समस्या को हल करने के लिए जिसमें हमें एक बाइनरी ट्री दिया जाता है। अब हमें उस पथ को खोजने की आवश्यकता है जिसमें अधिकतम संख्या में मोड़ हों। यानी, एक मोड़ तब माना जाता है जब पथ की दिशा बाएं से दाएं या इसके विपरीत बदलती है, उदाहरण के लिए

इनपुट -

सी ++ पथ लंबाई जिसमें अधिकतम संख्या में मोड़ हैं

आउटपुट -

6

अब इस दृष्टिकोण में, हम पेड़ से गुजरेंगे और पिछले आंदोलनों का ट्रैक रखेंगे। यदि दिशा बदल जाती है, तो हम बस अपने मोड़ों की संख्या को अपडेट करते हैं, और फिर हम अधिकतम पाते हैं।

समाधान खोजने के लिए दृष्टिकोण

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

उदाहरण

#include <bits/stdc++.h>
using namespace std;
struct Node { // structure of our node
    int key;
    struct Node* left;
    struct Node* right;
};
struct Node* newNode(int key){ // initializing our node
    struct Node* node = new Node();
    node->left = NULL;
    node->right = NULL;
    node->key = key;
    return node;
}
void maximumBends(struct Node* node,char direction, int bends,
                    int* maxBends, int soFar,int* len){
    if (node == NULL) // if null is reached
       return;
    if (node->left == NULL && node->right == NULL) { // if we reach the leaf node then
                                                   //we check if we have to update our answer or not
        if (bends > *maxBends) {
            *maxBends = bends;
            *len = soFar;
        }
    }
    else {
        if (direction == 'l') { // current direction is left
            maximumBends(node->left, direction,bends, maxBends,soFar + 1, len);
            maximumBends(node->right, 'r',bends + 1, maxBends,soFar + 1, len); // if we change direction so bend also increases
        }
        else {
            maximumBends(node->right, direction,bends, maxBends,soFar + 1, len);
            maximumBends(node->left, 'l',bends + 1, maxBends,soFar + 1, len); // same as when direction was left
        }
    }
}
int main(){
    struct Node* root = newNode(10);
    root->left = newNode(8);
    root->right = newNode(2);
    root->left->left = newNode(3);
    root->left->right = newNode(5);
    root->right->left = newNode(2);
    root->right->left->right = newNode(1);
    root->right->left->right->left = newNode(9);
    int len = 0, bends = 0, maxBends = -1;
    if(!root) // if tree is empty
       cout << "0\n";
    else{
        if (root->left) // if left subtree exists
            maximumBends(root->left, 'l',bends, &maxBends, 1, &len);
        if (root->right) // if right subtree exists
            maximumBends(root->right, 'r', bends,&maxBends, 1, &len);
        cout << len << "\n";
    }
    return 0;
}

आउटपुट

4

उपरोक्त कोड की व्याख्या

उपरोक्त दृष्टिकोण में, हम बस सभी पथों को पार कर रहे हैं और अब तक पाए गए मोड़ को गिनते हैं जब हम पथ के अंत तक पहुंचते हैं। कंडीशन सही है, इसलिए हम अपने अधिकतम मोड़ और पथ की लंबाई को इस नई लंबाई तक अपडेट करते हैं, और इस तरह हमारा प्रोग्राम आगे बढ़ता है।

निष्कर्ष

इस ट्यूटोरियल में, हम अधिकतम संख्या में मोड़ वाले पथ की लंबाई को खोजने के लिए एक समस्या का समाधान करते हैं। हमने इस समस्या के लिए C++ प्रोग्राम और संपूर्ण दृष्टिकोण (Normal) भी सीखा जिसके द्वारा हमने इस समस्या को हल किया। हम उसी प्रोग्राम को अन्य भाषाओं जैसे सी, जावा, पायथन और अन्य भाषाओं में लिख सकते हैं। हमें उम्मीद है कि आपको यह ट्यूटोरियल मददगार लगा होगा।


  1. C++ में बाइनरी ट्री में अधिकतम लगातार बढ़ती पथ लंबाई

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें सबसे लंबे पथ की लंबाई की गणना करनी है जिसमें बढ़ते क्रम में लगातार मूल्यों के साथ नोड्स होते हैं। प्रत्येक नोड को लंबाई 1 के पथ के रूप में माना जाएगा। तो, अगर इनपुट पसंद है तो आउटपुट 3 होगा क्योंकि (11, 12, 13) अधिकतम क्रमागत पथ है। इसे हल करने के लिए

  1. C++ में द्विदलीय ग्राफ में किनारों की अधिकतम संख्या

    समस्या कथन एक पूर्णांक N दिया गया है जो शीर्षों की संख्या का प्रतिनिधित्व करता है। कार्य N शीर्षों के द्विदलीय ग्राफ़ में किनारों की अधिकतम संभव संख्या ज्ञात करना है। द्विपक्षीय ग्राफ़ द्विपक्षीय ग्राफ वह होता है जिसमें शीर्षों के 2 सेट होते हैं। सेट ऐसे होते हैं कि एक ही सेट के कोने कभी भी उनके ब

  1. C++ में 0 और 1 के सेगमेंट की अधिकतम लंबाई

    समस्या कथन इकाई और शून्य से मिलकर बनी एक स्ट्रिंग को देखते हुए। कार्य स्ट्रिंग के खंडों की अधिकतम लंबाई का पता लगाना है जैसे कि प्रत्येक खंड में 1 की संख्या 0 से अधिक हो उदाहरण यदि इनपुट स्ट्रिंग 10111000001011 है, तो उत्तर 12 इस प्रकार होगा - पहला खंड 7 10111000001011 लंबाई का है दूसरा खंड 5 101