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

C++ प्रोग्राम: बाइनरी सर्च ट्री पर लेफ्ट रोटेशन करना

एक बाइनरी सर्च ट्री एक सॉर्टेड बाइनरी ट्री है जिसमें सभी नोड्स में निम्नलिखित दो गुण होते हैं -

एक नोड का राइट सब-ट्री उसके पैरेंट नोड की कुंजी से अधिक सभी कुंजियों को रखता है।

एक नोड का लेफ्ट सब-ट्री उसके पैरेंट नोड की कुंजी से कम सभी कुंजियों को रखता है। प्रत्येक नोड में दो से अधिक चाइल्ड नहीं होने चाहिए।

ट्री रोटेशन एक ऑपरेशन है जो बाइनरी ट्री पर एलिमेंट्स के क्रम में हस्तक्षेप किए बिना संरचना को बदलता है। यह एक नोड को ट्री में ऊपर ले जाता है और एक नोड को नीचे। इसका उपयोग ट्री के आकार को बदलने के लिए किया जाता है, और छोटे सबट्री को नीचे और बड़े सबट्री को ऊपर ले जाकर इसकी ऊंचाई को कम करता है, जिसके परिणामस्वरूप कई ट्री ऑपरेशंस के प्रदर्शन में सुधार होता है। रोटेशन की दिशा उस तरफ निर्भर करती है जिस तरफ ट्री नोड्स शिफ्ट होते हैं जबकि अन्य कहते हैं कि यह इस पर निर्भर करता है कि कौन सा चाइल्ड रूट की जगह लेता है। यह बाइनरी सर्च ट्री पर लेफ्ट रोटेशन करने के लिए एक C++ प्रोग्राम है।

फंक्शन विवरण:

  • height(avl *): दिए गए AVL ट्री की ऊंचाई की गणना करता है।
  • difference(avl *): दिए गए ट्री के सबट्री की ऊंचाई के बीच अंतर की गणना करता है।
  • avl *rr_rotat(avl *): राइट-राइट रोटेशन राइट रोटेशन के बाद राइट रोटेशन का संयोजन है।
  • avl *ll_rotat(avl *): लेफ्ट-लेफ्ट रोटेशन लेफ्ट रोटेशन के बाद लेफ्ट रोटेशन का संयोजन है।
  • avl *lr_rotat(avl*): लेफ्ट-राइट रोटेशन लेफ्ट रोटेशन के बाद राइट रोटेशन का संयोजन है।
  • C++ प्रोग्राम: बाइनरी सर्च ट्री पर लेफ्ट रोटेशन करना
  • avl *rl_rotat(avl *): यह राइट रोटेशन के बाद लेफ्ट रोटेशन का संयोजन है।
  • C++ प्रोग्राम: बाइनरी सर्च ट्री पर लेफ्ट रोटेशन करना
  • avl * balance(avl *): बैलेंस फैक्टर प्राप्त करके ट्री पर बैलेंस ऑपरेशन करता है।
  • C++ प्रोग्राम: बाइनरी सर्च ट्री पर लेफ्ट रोटेशन करना
  • avl * insert(avl*, int): इन्सर्ट ऑपरेशन करता है। इस फंक्शन का उपयोग करके ट्री में मान डालें।
  • show(avl*, int): ट्री के मान प्रदर्शित करता है।
  • inorder(avl *): ट्री को इन-ऑर्डर तरीके से ट्रैवर्स करता है।
  • preorder(avl *): ट्री को प्री-ऑर्डर तरीके से ट्रैवर्स करता है।
  • postorder(avl*): ट्री को पोस्ट-ऑर्डर तरीके से ट्रैवर्स करता है।

उदाहरण

#include<iostream>
#include<cstdio>
#include<sstream>
#include<algorithm>
#define pow2(n) (1 << (n))
using namespace std;

struct avl {
    int d;
    struct avl *l;
    struct avl *r;
}*r;

class avl_tree {
public:
    int height(avl *);
    int difference(avl *);
    avl *rr_rotat(avl *);
    avl *ll_rotat(avl *);
    avl *lr_rotat(avl*);
    avl *rl_rotat(avl *);
    avl * balance(avl *);
    avl * insert(avl*, int);
    void show(avl*, int);
    void inorder(avl *);
    void preorder(avl *);
    void postorder(avl*);
    avl_tree() {
        r = NULL;
    }
};

// ... (पूर्ण कार्यान्वयन - AVL ट्री प्रोग्राम के समान)

int main() {
    int c, i;
    avl_tree avl;
    while (1) {
        cout << "1.Insert Element into the tree" << endl;
        cout << "2.show Balanced AVL Tree" << endl;
        cout << "3.InOrder traversal" << endl;
        cout << "4.PreOrder traversal" << endl;
        cout << "5.PostOrder traversal" << endl;
        cout << "6.Exit" << endl;
        cout << "Enter your Choice: ";
        cin >> c;
        switch (c) {
            case 1:
                cout << "Enter value to be inserted: ";
                cin >> i;
                r= avl.insert(r, i);
                break;
            case 2:
                if (r == NULL) {
                    cout << "Tree is Empty" << endl;
                    continue;
                }
                cout << "Balanced AVL Tree:" << endl;
                avl.show(r, 1);
                cout<<endl;
                break;
            case 3:
                cout << "Inorder Traversal:" << endl;
                avl.inorder(r);
                cout << endl;
                break;
            case 4:
                cout << "Preorder Traversal:" << endl;
                avl.preorder(r);
                cout << endl;
                break;
            case 5:
                cout << "Postorder Traversal:" << endl;
                avl.postorder(r);
                cout << endl;
                break;
            case 6:
                exit(1);
                break;
            default:
                cout << "Wrong Choice" << endl;
        }
    }
    return 0;
}

आउटपुट

1.Insert Element into the tree
2.show Balanced AVL Tree
3.InOrder traversal
4.PreOrder traversal
5.PostOrder traversal
6.Exit
Enter your Choice: 1
Enter value to be inserted: 13
...
Left-Left Rotation
...
Right-Right Rotation
...
Inorder Traversal: 4 5 8 10 11 13 15 16
Preorder Traversal: 10 5 4 8 13 11 15 16
Postorder Traversal: 4 8 5 11 16 15 13 10
  1. C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण

    एक बाइनरी ट्री एक विशेष प्रकार का ट्री है जिसमें ट्री का प्रत्येक नोड अधिकतम दो चाइल्ड नोड रख सकता है। इन चाइल्ड नोड्स को राइट चाइल्ड और लेफ्ट चाइल्ड के नाम से जाना जाता है। एक साधारण बाइनरी ट्री है - बाइनरी सर्च ट्री (BST) एक विशेष प्रकार का ट्री है जो निम्नलिखित नियमों का पालन करता है - बाएं चाइ

  1. C++ में बाइनरी खोज प्रोग्राम C++ में बाइनरी खोज प्रोग्राम

    बाइनरी खोज क्या है? बाइनरी खोज (आधा-अंतराल खोज) एक खोज एल्गोरिदम है जो क्रमबद्ध सरणी में लक्ष्य मान की स्थिति ढूंढता है। यह लक्ष्य मान की तुलना मध्य तत्व से करता है और खोज स्थान को आधा कर देता है। मुख्य बिंदु केवल क्रमबद्ध सरणी पर काम करता है समय जटिलता: O(log n) दुनिया के सभी नाम क्रमबद्ध हों तो

  1. C++ में AVL ट्री को लागू करना C++ में AVL ट्री को लागू करना

    AVL ट्री एक सेल्फ-बैलेंसिंग बाइनरी सर्च ट्री है जहां सभी नोड्स के लिए बाएं और दाएं सबट्री की ऊंचाई का अंतर एक से अधिक नहीं हो सकता।ट्री रोटेशन एक ऑपरेशन है जो AVL ट्री पर एलिमेंट्स के क्रम में हस्तक्षेप किए बिना स्ट्रक्चर को बदलता है। यह ट्री में एक नोड को ऊपर ले जाता है और एक नोड को नीचे। इसका उपयो