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

C++ में बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल


बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल एक ट्री के तत्वों को इस तरह से पार करना है कि यदि पार किया जाए तो वे एक स्पाइरल बनाते हैं लेकिन रिवर्स ऑर्डर में। निम्नलिखित आकृति दिखाती है कि बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल कैसे होता है।

C++ में बाइनरी ट्री का एंटी-क्लॉकवाइज स्पाइरल ट्रैवर्सल

बाइनरी ट्री के स्पाइरल ट्रैवर्सल के लिए परिभाषित एल्गोरिदम निम्नलिखित तरीके से काम करता है -

दो वेरिएबल i और j आरंभ किए जाते हैं और मान i = 0 और j = वेरिएबल की ऊंचाई के बराबर होते हैं। एक फ्लैग का उपयोग यह जांचने के लिए किया जाता है कि किस सेक्शन को प्रिंट करना है। फ्लैग प्रारंभ में false पर सेट होता है। एक लूप जो i < j तक काम करता है, पहले आधे को प्रिंट करता है अन्यथा अंतिम को प्रिंट करता है और फ्लैग मान को फ्लिप करता है। यह तब तक होता है जब तक पूरा बाइनरी ट्री प्रिंट नहीं हो जाता।

उदाहरण

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

struct Node {
    struct Node* left;
    struct Node* right;
    int data;
    Node(int data) {
        this->data = data;
        this->left = NULL;
        this->right = NULL;
    }
};

int height(struct Node* root) {
    if (root == NULL)
        return 0;
    int lheight = height(root->left);
    int rheight = height(root->right);
    return max(1 + lheight, 1 + rheight);
}

void leftToRight(struct Node* root, int level) {
    if (root == NULL)
        return;
    if (level == 1)
        cout << root->data << " ";
    else if (level > 1) {
        leftToRight(root->left, level - 1);
        leftToRight(root->right, level - 1);
    }
}

void rightToLeft(struct Node* root, int level) {
    if (root == NULL)
        return;
    if (level == 1)
        cout << root->data << " ";
    else if (level > 1) {
        rightToLeft(root->right, level - 1);
        rightToLeft(root->left, level - 1);
    }
}

int main() {
    struct Node* root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->left->left = new Node(4);
    root->right->left = new Node(5);
    root->right->right = new Node(7);
    root->left->left->left = new Node(10);
    root->left->left->right = new Node(11);
    root->right->right->left = new Node(8);
    int i = 1;
    int j = height(root);
    int flag = 0;
    while (i <= j) {
        if (flag == 0) {
            rightToLeft(root, i);
            flag = 1;
            i++;
        } else {
            leftToRight(root, j);
            flag = 0;
            j--;
        }
    }
    return 0;
}

आउटपुट

1 10 11 8 3 2 4 5 7

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

    इस समस्या में, हमें एक बाइनरी ट्री दिया गया है। हमारा कार्य एक प्रोग्राम बनाना है जो C++ में बाइनरी ट्री में अधिकतम स्पाइरल सम ढूंढेगा।बाइनरी ट्री का स्पाइरल सम  बाइनरी ट्री के स्पाइरल ट्रैवर्सल में मिलने वाले नोड्स का योग है।ट्री के स्पाइरल ट्रैवर्सल में, नोड्स को रूट से लीफ नोड तक ट्रैवर्स कि

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

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

  1. बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में बाइनरी ट्री के दो नोड्स के बीच की दूरी खोजें C++ में

    मान लीजिए हमारे पास कुछ नोड्स के साथ एक बाइनरी ट्री है। हमें दो नोड्स u और v के बीच की दूरी खोजनी है। मान लीजिए ट्री नीचे जैसा है - अब (4, 6) के बीच की दूरी = 4, पथ की लंबाई 4 है, (5, 8) के बीच की लंबाई = 5 आदि। इस समस्या को हल करने के लिए, हम LCA (निम्नतम सामान्य पूर्वज) खोजेंगे, फिर LCA से दो नोड