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

C++ में BST में इनऑर्डर सक्सेसर - पुनरावर्ती समाधान


समस्या विवरण

मान लीजिए हमारे पास एक बाइनरी सर्च ट्री और उसमें एक नोड है, हमें BST में उस नोड का इनऑर्डर सक्सेसर ढूंढना है। जैसा कि हम जानते हैं कि नोड p का सक्सेसर वह नोड है जिसकी कुंजी p.val से सबसे छोटी बड़ी है।

उदाहरण के लिए, यदि इनपुट root = [2,1,3], p = 1 है:

C++ में BST में इनऑर्डर सक्सेसर - पुनरावर्ती समाधान

तो आउटपुट 2 होगा।

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

BST गुण का उपयोग करके पुनरावर्ती दृष्टिकोण:

  1. पुनरावर्ती विधि inorderSuccessor() परिभाषित करें जो root और p लेती है
  2. यदि root null है, तो null लौटाएं
  3. यदि root का मान <= p का मान, तो दाएं उपट्री में खोजें
  4. अन्यथा:
    • option := बाएं उपट्री में inorderSuccessor()
    • लौटाएं (यदि option शून्य है तो root, अन्यथा option)

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

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

class TreeNode{ 
public: 
    int val; 
    TreeNode *left, *right; 
    TreeNode(int data){ 
        val = data; 
        left = NULL; 
        right = NULL; 
    } 
}; 

class Solution { 
public: 
    TreeNode* inorderSuccessor(TreeNode* root, TreeNode* p) { 
        if(!root) return NULL; 
        if(root->val <= p->val){ 
            return inorderSuccessor(root->right, p); 
        } 
        else{ 
            TreeNode* option = inorderSuccessor(root->left, p); 
            return !option ? root : option; 
        } 
    } 
}; 

int main(){ 
    TreeNode *root = new TreeNode(2); 
    root->left = new TreeNode(1); 
    root->right = new TreeNode(3); 
    TreeNode *p = root->left; 
    Solution ob; 
    cout << (ob.inorderSuccessor(root, p))->val; 
    return 0;
}

इनपुट

{2,1,3},1

आउटपुट

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

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

  1. C++ में BST के दो नोड्स के बीच अधिकतम तत्व C++ में BST के दो नोड्स के बीच अधिकतम तत्व

    समस्या कथन N तत्वों का एक ऐरे और दो पूर्णांक A, B दिए गए हैं जो दिए गए ऐरे से संबंधित हैं। arr[0] से arr[n-1] तक तत्व डालकर एक बाइनरी सर्च ट्री बनाएं। कार्य A से B तक के पथ में अधिकतम तत्व ढूंढना है। उदाहरण यदि ऐरे है {24, 23, 15, 36, 19, 41, 25, 35} तो हम BST को निम्नानुसार बना सकते हैं: यदि हम

  1. C++ में BST से फ्लोर और सीलिंग मान प्राप्त करना C++ में BST से फ्लोर और सीलिंग मान प्राप्त करना

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