BCA / B.Tech 12 min read

Operation & Algorithm of Expression Tree in Hindi

Operation & Algorithm of Expression Tree in Data Structure in Hindi | एक्सपप्रेसन ट्री के ऑपरेशन और अल्गोरिथम हिंदी में :


एक्सप्रेशन ट्री (Expression Tree)

एक्सप्रेशन ट्री एक बाइनरी ट्री होता है जिसका उपयोग किसी गणितीय या तार्किक अभिव्यक्ति (expression) को दर्शाने के लिए किया जाता है। इसमें ऑपरेटर नोड्स और ऑपरेंड्स (संख्याएं या वेरिएबल्स) होते हैं। एक्सप्रेशन ट्री का उपयोग विभिन्न प्रकार के 
एक्सप्रेशनों जैसे गणितीय (Arithmetic) और तार्किक (Logical) एक्सप्रेशनों को स्टोर और उनका मूल्यांकन (evaluation) करने के लिए किया जाता है।

एक्सप्रेशन ट्री एक महत्वपूर्ण डेटा स्ट्रक्चर है जो गणितीय और तार्किक एक्सप्रेशनों को दर्शाने और उनका मूल्यांकन करने के लिए उपयोग किया जाता है। इसकी संरचना सरल होती है और इसे विभिन्न फॉर्मेट्स में ट्रैवर्स और पुनर्निर्माण किया जा सकता है।
 यह कम्पाइलर्स और इंटरप्रेटर्स में विशेष रूप से उपयोगी होता है।


एक्सप्रेशन ट्री का संरचना (Structure of Expression Tree)

एक्सप्रेशन ट्री में:

आंतरिक नोड्स (Internal Nodes) ऑपरेटर होते हैं (जैसे +, -, *, /)।
पत्ते (Leaf Nodes) ऑपरेंड्स होते हैं (जैसे संख्या या वेरिएबल)।

उदाहरण:

यदि हमारे पास यह गणितीय एक्सप्रेशन है: A + B * C
तो इसका एक्सप्रेशन ट्री इस प्रकार हो सकता है:

     +
    / \
   A   *
      / \
     B   C

Operations of Expression Tree in Data Structure in  Hindi |  एक्सप्रेशन ट्री के ऑपरेशंस :


एक्सप्रेशन ट्री को postfix, prefix, या infix एक्सप्रेशनों के आधार पर बनाया जाता है। आमतौर पर postfix एक्सप्रेशन का उपयोग किया जाता है क्योंकि इसे आसानी से स्टैक की मदद से बनाया जा सकता है।

वैल्यूएशन (Evaluation)

एक्सप्रेशन ट्री का मुख्य उपयोग एक्सप्रेशन का मूल्य निकालने के लिए होता है। एक्सप्रेशन ट्री का वैल्यूएशन तब होता है जब हम ट्रैवर्सल (Inorder, Postorder, Preorder) का उपयोग करके गणितीय या तार्किक ऑपरेशन करते हैं।

ट्री का ट्रैवर्सल (Traversal of Tree)

  • इनऑर्डर (Inorder Traversal): यह ट्रैवर्सल वाम उपट्री (Left Subtree) -> रूट (Root) -> दाएं उपट्री (Right Subtree) के क्रम में होता है।
  • पोस्टऑर्डर (Postorder Traversal): इसमें ट्रैवर्सल क्रम वाम उपट्री -> दाएं उपट्री -> रूट होता है।
  • प्रीऑर्डर (Preorder Traversal): इसमें रूट -> वाम उपट्री -> दाएं उपट्री के क्रम में ट्रैवर्सल होता है।

मूल्यांकन (Evaluation):

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

पुनर्निर्माण (Reconstruction)
आप किसी एक्सप्रेशन को ट्री से पुनः postfix, prefix, या infix फॉर्मेट में परिवर्तित कर सकते हैं। यह ट्रैवर्सल पर निर्भर करता है कि आप किस फॉर्मेट में एक्सप्रेशन को चाहते हैं।

Algorithm for Expression Tree Construction in Data Structure in Hindi | एक्सप्रेशन ट्री निर्माण की एल्गोरिद्म :

एक्सप्रेशन ट्री को बनाने के लिए postfix (या prefix) एक्सप्रेशन का उपयोग करना सबसे आसान तरीका है। इस एल्गोरिद्म में स्टैक की मदद से ट्री को बनाया जाता है।

  • एल्गोरिद्म: Postfix एक्सप्रेशन से एक्सप्रेशन ट्री बनाना
  • एक खाली स्टैक शुरू करें।
  • पोस्टफिक्स एक्सप्रेशन को बाएं से दाएं स्कैन करें।
  • यदि कोई ऑपरेंड (संख्या या वेरिएबल) मिलता है, तो उसे एक नोड में परिवर्तित करें और स्टैक में डालें।
  • यदि कोई ऑपरेटर मिलता है:
  • स्टैक से दो नोड्स को पॉप करें।
  • ऑपरेटर के लिए एक नया नोड बनाएँ।
  • उन पॉप किए गए नोड्स को इसके चाइल्ड नोड्स के रूप में सेट करें।
  • इस नए नोड को स्टैक में डालें।
  • अंत में, स्टैक में जो एक नोड बचता है, वह एक्सप्रेशन ट्री का रूट नोड होता है।
  • उदाहरण:
  • पोस्टफिक्स एक्सप्रेशन: AB+C*

  • A और B को स्टैक में डालें।
  • + ऑपरेटर मिलने पर A और B को पॉप करें, और + के नोड को बनाकर उसे A और B को चाइल्ड के रूप में जोड़ें।
  • अब C को स्टैक में डालें।
  • * ऑपरेटर मिलने पर + नोड और C को पॉप करें, और * नोड बनाकर इसे चाइल्ड के रूप में जोड़ें।

Advantages of Expression Tree in Data Structure in Hindi | एक्सप्रेशन ट्री के लाभ :

  • विभिन्न एक्सप्रेशनों को संग्रहित और प्रबंधित करना: एक्सप्रेशन ट्री का उपयोग विभिन्न प्रकार के गणितीय और तार्किक एक्सप्रेशनों को स्टोर करने के लिए किया जाता है।
  • ऑपरेशनों का मूल्यांकन: एक्सप्रेशन ट्री से किसी भी जटिल एक्सप्रेशन का मूल्य आसानी से निकाला जा सकता है।
  • फ्लेक्सिबिलिटी: यह ट्री विभिन्न फॉर्मेट (postfix, infix, prefix) में एक्सप्रेशनों को पुनः बनाने में सक्षम है।
  • सरलता: इसका ट्रैवर्सल और निर्माण प्रक्रिया सरल और समझने में आसान होती है।
  • प्रोग्रामिंग लैंग्वेज में उपयोग: कंपाइलर्स और इंटरप्रेटर्स में एक्सप्रेशन ट्री का व्यापक रूप से उपयोग किया जाता है।

Disadvantages of Expression Tree in Data Structure in Hindi | एक्सप्रेशन ट्री के नुकसान :

  • जटिलता में वृद्धि: बड़े और जटिल एक्सप्रेशनों के लिए एक्सप्रेशन ट्री की जटिलता बढ़ जाती है।
  • संसाधन उपयोग: एक्सप्रेशन ट्री का निर्माण और ट्रैवर्सल अधिक संसाधनों और मेमोरी का उपयोग करता है।
  • समय की खपत: बड़ी संख्या में नोड्स वाले एक्सप्रेशन ट्री के मूल्यांकन और पुनर्निर्माण में अधिक समय लग सकता है।

Expression Tree Program in C/C++ | एक्सप्रेशन ट्री का प्रोग्राम 

#include <iostream>
#include <stack>
using namespace std;

// एक ट्री नोड के लिए क्लास
struct Node {
    char value;
    Node* left, * right;
    
    Node(char data) {
        value = data;
        left = right = NULL;
    }
};

// चेक करें कि यह ऑपरेटर है या नहीं
bool isOperator(char c) {
    return (c == '+' || c == '-' || c == '*' || c == '/');
}

// पोस्टफिक्स से एक्सप्रेशन ट्री का निर्माण करें
Node* constructTree(string postfix) {
    stack<Node*> st;
    Node *t, *t1, *t2;
    
    // पोस्टफिक्स एक्सप्रेशन को बाएं से दाएं स्कैन करें
    for (int i = 0; i < postfix.length(); i++) {
        // अगर ऑपरेटर नहीं है, तो नया नोड बनाएं और स्टैक में डालें
        if (!isOperator(postfix[i])) {
            t = new Node(postfix[i]);
            st.push(t);
        } else {
            // ऑपरेटर है, तो दो नोड्स पॉप करें
            t = new Node(postfix[i]);
            t1 = st.top(); st.pop();
            t2 = st.top(); st.pop();
            
            // पॉप किए गए नोड्स को चाइल्ड्स के रूप में जोड़ें
            t->right = t1;
            t->left = t2;
            
            // इस नोड को स्टैक में डालें
            st.push(t);
        }
    }
    
    // स्टैक का आखिरी नोड एक्सप्रेशन ट्री का रूट होगा
    return st.top();
}

// इनऑर्डर ट्रैवर्सल
void inorder(Node* t) {
    if (t) {
        inorder(t->left);
        cout << t->value << " ";
        inorder(t->right);
    }
}

int main() {
    string postfix = "AB+C*";
    Node* root = constructTree(postfix);
    
    cout << "Inorder Traversal of Expression Tree: ";
    inorder(root);
    
    return 0;
}