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

C++ में थ्रेडेड बाइनरी ट्री का इनऑर्डर ट्रैवर्सल


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

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

फुली थ्रेडेड बाइनरी ट्री के लिए, प्रत्येक नोड में पांच फील्ड होते हैं। सामान्य बाइनरी ट्री नोड की तरह तीन फील्ड, दो अन्य फील्ड यह दर्शाने के लिए बूलियन मान संग्रहीत करने के लिए कि उस तरफ का लिंक वास्तविक लिंक है या थ्रेड।

बायां थ्रेड फ्लैग बायां लिंक डेटा दायां लिंक दायां थ्रेड फ्लैग

यह फुली थ्रेडेड बाइनरी ट्री है।

C++ में थ्रेडेड बाइनरी ट्री का इनऑर्डर ट्रैवर्सल

एल्गोरिदम

inorder(): Begin
    temp := root
    अनंत बार दोहराएं, करें
        p := temp
        temp = temp का दायां
        यदि p का दायां फ्लैग गलत है, तो
            जबकि temp का बायां फ्लैग शून्य नहीं है, करें
                temp := temp का बायां
            किया
        अंत यदि
        यदि temp और root समान हैं, तो
            ब्रेक
        अंत यदि
        temp की कुंजी प्रिंट करें
    किया
End

उदाहरण

#include <iostream>
#define MAX_VALUE 65536
using namespace std;

class N { // नोड घोषणा
public:
    int k;
    N *l, *r;
    bool leftTh, rightTh;
};

class ThreadedBinaryTree {
private:
    N *root;
public:
    ThreadedBinaryTree() { // चर आरंभ करने के लिए कंस्ट्रक्टर
        root = new N();
        root->r = root->l = root;
        root->leftTh = true;
        root->k = MAX_VALUE;
    }

    void insert(int key) {
        N *p = root;
        for (;;) {
            if (p->k < key) { // दाएं थ्रेड पर जाएं
                if (p->rightTh)
                    break;
                p = p->r;
            } else if (p->k > key) { // बाएं थ्रेड पर जाएं
                if (p->leftTh)
                    break;
                p = p->l;
            } else {
                return;
            }
        }
        N *temp = new N();
        temp->k = key;
        temp->rightTh = temp->leftTh = true;
        if (p->k < key) {
            temp->r = p->r;
            temp->l = p;
            p->r = temp;
            p->rightTh = false;
        } else {
            temp->r = p;
            temp->l = p->l;
            p->l = temp;
            p->leftTh = false;
        }
    }

    void inorder() { // ट्री प्रिंट करें
        N *temp = root, *p;
        for (;;) {
            p = temp;
            temp = temp->r;
            if (!p->rightTh) {
                while (!temp->leftTh) {
                    temp = temp->l;
                }
            }
            if (temp == root)
                break;
            cout << temp->k << " ";
        }
        cout << endl;
    }
};

int main() {
    ThreadedBinaryTree tbt;
    cout << "थ्रेडेड बाइनरी ट्री\n";
    tbt.insert(56);
    tbt.insert(23);
    tbt.insert(89);
    tbt.insert(85);
    tbt.insert(20);
    tbt.insert(30);
    tbt.insert(12);
    tbt.inorder();
    cout << "\n";
}

आउटपुट

थ्रेडेड बाइनरी ट्री
12 20 23 30 56 85 89

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

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

  1. C++ में दिए गए बाइनरी ट्री का इनऑर्डर रिकर्सिव ट्रैवर्सल करने का प्रोग्राम C++ में दिए गए बाइनरी ट्री का इनऑर्डर रिकर्सिव ट्रैवर्सल करने का प्रोग्राम

    ट्री ट्रैवर्सल ग्राफ ट्रैवर्सल का एक रूप है। इसमें ट्री के प्रत्येक नोड को ठीक एक बार चेक या प्रिंट करना शामिल है। बाइनरी सर्च ट्री का इनऑर्डर ट्रैवर्सल ट्री के नोड्स को (लेफ्ट, रूट, राइट) के क्रम में विजिट करता है। बाइनरी ट्री के इनऑर्डर ट्रैवर्सल का एक उदाहरण निम्नलिखित है। एक बाइनरी ट्री निम्नलिख

  1. पायथन में बाइनरी ट्री इनऑर्डर ट्रैवर्सल पायथन में बाइनरी ट्री इनऑर्डर ट्रैवर्सल

    मान लीजिए हमारे पास एक बाइनरी ट्री है। हमें रिकर्सन का उपयोग किए बिना इनऑर्डर ट्रैवर्सल योजना का उपयोग करके इस ट्री को पार करना है। इसलिए यदि ट्री इस तरह हैतो ट्रैवर्सल [2,5,7,10,15,20] होगाइसे हल करने के लिए, हम इन चरणों का पालन करेंगे -दो सरणी res और stack बनाएं, curr := root सेट करेंएक अनंत लूप च