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

C++ में BST प्रीऑर्डर अनुक्रम सत्यापित करें - स्टैक-आधारित O(n) समाधान


समस्या विवरण

मान लीजिए हमारे पास संख्याओं का एक अनुक्रम है; हमें जांचना है कि क्या यह बाइनरी सर्च ट्री का सही प्रीऑर्डर ट्रैवर्सल अनुक्रम है। हम मान सकते हैं कि अनुक्रम में प्रत्येक संख्या अद्वितीय है।

उदाहरण के लिए, यदि इनपुट [5,2,1,3,6] है, तो आउटपुट true होगा।

समाधान दृष्टिकोण

स्टैक सिमुलेशन + निचली सीमा ट्रैकिंग:

  1. itr := -1 (स्टैक शीर्ष सूचकांक)
  2. low := -अनंत (निचली सीमा)
  3. i को 0 से प्रीऑर्डर आकार-1 तक:
    • x := preorder[i]
    • यदि x < low, तो false लौटाएं
    • जब (itr >= 0 और preorder[itr] < x):
      • low := preorder[itr]
      • itr--
    • itr++
    • preorder[itr] := x (वर्तमान को स्टैक पर पुश करें)
  4. true लौटाएं

C++ कार्यान्वयन

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

class Solution { 
public: 
    bool verifyPreorder(vector<int>& preorder) { 
        int itr = -1; 
        int low = INT_MIN; 
        for (int i = 0; i < preorder.size(); i++) { 
            int x = preorder[i]; 
            if (x < low) 
                return false; 
            while (itr >= 0 && preorder[itr] < x) { 
                low = preorder[itr]; 
                itr--; 
            } 
            itr++; 
            preorder[itr] = x; 
        } 
        return true; 
    } 
}; 

int main(){ 
    Solution ob; 
    vector<int> v = {5,2,1,3,6}; 
    cout << (ob.verifyPreorder(v)); 
    return 0;
}

इनपुट

{5,2,1,3,6}

आउटपुट

1
  1. C++ में बाइनरी ट्री में नोड का प्रीऑर्डर सक्सेसर C++ में बाइनरी ट्री में नोड का प्रीऑर्डर सक्सेसर

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

  1. C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण C++ में बाइनरी ट्री को बाइनरी सर्च ट्री में रूपांतरण

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

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

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