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

डेटा स्ट्रक्चर में बाइनरी ट्री ट्रैवर्सल


इस खंड में हम बाइनरी सर्च ट्री में मौजूद कीज़ को ट्रैवर्स करने के लिए विभिन्न ट्रैवर्सल एल्गोरिदम देखेंगे। ये ट्रैवर्सल हैं: इनऑर्डर ट्रैवर्सल, प्रीऑर्डर ट्रैवर्सल, पोस्टऑर्डर ट्रैवर्सल और लेवल ऑर्डर ट्रैवर्सल।

मान लीजिए हमारे पास ऐसा एक ट्री है:

डेटा स्ट्रक्चर में बाइनरी ट्री ट्रैवर्सल

इनऑर्डर ट्रैवर्सल क्रम इस प्रकार होगा: 5 8 10 15 16 20 23

प्रीऑर्डर ट्रैवर्सल क्रम इस प्रकार होगा: 10 5 8 16 15 20 23

पोस्टऑर्डर ट्रैवर्सल क्रम इस प्रकार होगा: 8 5 15 23 20 16 10

लेवल-ऑर्डर ट्रैवर्सल क्रम इस प्रकार होगा: 10, 5, 16, 8, 15, 20, 23

एल्गोरिदम

inorderTraverse(root): Begin    if root खाली नहीं है, then       inorderTraversal(root का लेफ्ट)       रूट का मान प्रिंट करें       inorderTraversal(root का राइट)    end if End preorderTraverse(root): Begin    if root खाली नहीं है, then       रूट का मान प्रिंट करें       preorderTraversal(root का लेफ्ट)       preorderTraversal(root का राइट)    end if End postorderTraverse(root): Begin    if root खाली नहीं है, then       postorderTraversal(root का लेफ्ट)       postorderTraversal(root का राइट)       रूट का मान प्रिंट करें    end if End levelOrderTraverse(root): Begin    नोड्स स्टोर करने के लिए कतार que परिभाषित करें    रूट को que में इन्सर्ट करें।    while que खाली नहीं है, do       item := कतार के फ्रंट पोजीशन पर मौजूद आइटम       item का मान प्रिंट करें       अगर item का लेफ्ट नल नहीं है, then          item के लेफ्ट को que में इन्सर्ट करें       end if       अगर item का राइट नल नहीं है, then          item के राइट को que में इन्सर्ट करें       end if       que से फ्रंट एलिमेंट डिलीट करें    done End

उदाहरण

#include<iostream> #include<queue> using namespace std; class node{    public:       int h_left, h_right, bf, value;       node *left, *right; }; class tree{    private:       node *get_node(int key);    public:       node *root;       tree(){          root = NULL; //शुरुआत में रूट को NULL सेट करें       }       void inorder_traversal(node *r);       void preorder_traversal(node *r);       void postorder_traversal(node *r);       void levelorder_traversal(node *r);       node *insert_node(node *root, int key); }; node *tree::get_node(int key){    node *new_node;    new_node = new node; //डायनामिक रूप से एक नया नोड बनाएं    new_node->h_left = 0; new_node->h_right = 0;    new_node->bf = 0;    new_node->value = key; //दिए गए की से मान स्टोर करें    new_node->left = NULL; new_node->right = NULL;    return new_node; } void tree::inorder_traversal(node *r){    if(r != NULL){ //जब रूट मौजूद है, लेफ्ट - रूट - राइट विजिट करें       inorder_traversal(r->left);       cout << r->value << " ";       inorder_traversal(r->right);    } } void tree::preorder_traversal(node *r){    if(r != NULL){ //जब रूट मौजूद है, लेफ्ट - रूट - राइट विजिट करें       cout << r->value << " ";       preorder_traversal(r->left);       preorder_traversal(r->right);    } } void tree::postorder_traversal(node *r){    if(r != NULL){ //जब रूट मौजूद है, लेफ्ट - रूट - राइट विजिट करें       postorder_traversal(r->left);       postorder_traversal(r->right);       cout << r->value << " ";    } } void tree::levelorder_traversal(node *root){    queue <node*> que;    node *item;    que.push(root); //पहले रूट इन्सर्ट करें    while(!que.empty()){       item = que.front(); //कतार के फ्रंट एंड से एलिमेंट प्राप्त करें       cout << item->value << " ";       if(item->left != NULL) //जब लेफ्ट चाइल्ड मौजूद है, कतार में इन्सर्ट करें          que.push(item->left);       if(item->right != NULL) //जब राइट चाइल्ड मौजूद है, कतार में इन्सर्ट करें          que.push(item->right);       que.pop(); //कतार से आइटम हटाएं    } } node *tree::insert_node(node *root, int key){    if(root == NULL){       return (get_node(key)); //जब ट्री खाली है, रूट के रूप में एक नोड बनाएं    }    if(key < root->value){ //जब की रूट मान से छोटी है, बाएं जाएं       root->left = insert_node(root->left, key);    }else if(key > root->value){ //जब की रूट मान से बड़ी है, दाएं जाएं       root->right = insert_node(root->right, key);    }    return root; //जब की पहले से मौजूद है, इसे फिर से इन्सर्ट न करें } main(){    node *root;    tree my_tree;    //ट्री में कुछ कीज़ इन्सर्ट करें।    my_tree.root = my_tree.insert_node(my_tree.root, 10);    my_tree.root = my_tree.insert_node(my_tree.root, 5);    my_tree.root = my_tree.insert_node(my_tree.root, 16);    my_tree.root = my_tree.insert_node(my_tree.root, 20);    my_tree.root = my_tree.insert_node(my_tree.root, 15);    my_tree.root = my_tree.insert_node(my_tree.root, 8);    my_tree.root = my_tree.insert_node(my_tree.root, 23);    cout << "In-Order Traversal: ";    my_tree.inorder_traversal(my_tree.root);    cout << "\nPre-Order Traversal: ";    my_tree.preorder_traversal(my_tree.root);    cout << "\nPost-Order Traversal: ";    my_tree.postorder_traversal(my_tree.root);    cout << "\nLevel-Order Traversal: ";    my_tree.levelorder_traversal(my_tree.root); }

आउटपुट

In-Order Traversal: 5 8 10 15 16 20 23 Pre-Order Traversal: 10 5 8 16 15 20 23 Post-Order Traversal: 8 5 15 23 20 16 10 Level-Order Traversal: 10 5 16 8 15 20 23
  1. डेटा स्ट्रक्चर में लेवल ऑर्डर ट्री ट्रैवर्सल डेटा स्ट्रक्चर में लेवल ऑर्डर ट्री ट्रैवर्सल

    इस खंड में हम बाइनरी सर्च ट्री के लिए लेवल-ऑर्डर ट्रैवर्सल तकनीक देखेंगे।मान लीजिए हमारे पास ऐसा एक ट्री है:ट्रैवर्सल क्रम इस प्रकार होगा: 10, 5, 16, 8, 15, 20, 23एल्गोरिदमlevelOrderTraverse(root): Begin    नोड्स स्टोर करने के लिए कतार que परिभाषित करें    रूट को que में इन्सर्ट

  1. डेटा स्ट्रक्चर में बाइनरी ट्री और गुण डेटा स्ट्रक्चर में बाइनरी ट्री और गुण

    इस खंड में हम बाइनरी ट्री डेटा स्ट्रक्चर के कुछ महत्वपूर्ण गुण देखेंगे। मान लीजिए हमारे पास ऐसा बाइनरी ट्री है।कुछ गुण हैं:लेवल l पर नोड्स की अधिकतम संख्या $2^{l-1}$ होगी। यहां लेवल रूट से नोड तक के पथ पर नोड्स की संख्या है, जिसमें रूट स्वयं शामिल है। हम रूट का लेवल 1 मान रहे हैं।ऊंचाई h के बाइनरी ट

  1. डेटा स्ट्रक्चर में बाइनरी ट्री प्रतिनिधित्व डेटा स्ट्रक्चर में बाइनरी ट्री प्रतिनिधित्व

    यहां हम देखेंगे कि कंप्यूटर की मेमोरी में बाइनरी ट्री को कैसे दर्शाया जाए। प्रतिनिधित्व के लिए दो अलग-अलग तरीके हैं। ये सरणी और लिंक्ड लिस्ट का उपयोग करके हैं।मान लीजिए हमारे पास ऐसा एक ट्री है:सरणी प्रतिनिधित्व लेवल ऑर्डर फैशन का उपयोग करके एलिमेंट्स को स्कैन करके ट्री डेटा को स्टोर करता है। तो यह