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

C++ में बाइनरी ट्री नोड्स को वैलिडेट करना


मान लीजिए हमारे पास 0 से n-1 तक नंबरेड n बाइनरी ट्री नोड्स हैं जहां नोड i के दो चिल्ड्रन leftChild[i] और rightChild[i] हैं, हमें true कहना है यदि और केवल यदि सभी दिए गए नोड्स ठीक एक वैलिड बाइनरी ट्री बनाते हैं। जब नोड i का कोई लेफ्ट चाइल्ड नहीं होता तो leftChild[i] -1 के बराबर होगा, इसी तरह राइट चाइल्ड के लिए। हमें ध्यान रखना होगा कि नोड्स की कोई वैल्यू नहीं है और हम इस समस्या में केवल नोड नंबर्स का उपयोग करते हैं। उदाहरण के लिए, अगर इनपुट है:

C++ में बाइनरी ट्री नोड्स को वैलिडेट करना

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

इसे हल करने के लिए, हम इन स्टेप्स को फॉलो करेंगे:

  • dfs नाम का एक मेथड डिफाइन करें, जो leftChild, rightChild और visited लेगा

  • अगर नोड n विजिटेड है, तो false लौटाएं

  • नोड n को विजिटेड सेट में इंसर्ट करें

  • ret := true सेट करें

  • अगर n का leftChild -1 नहीं है, तो ret := ret AND dfs(leftChild[node], leftChild, rightChild, visited)

  • अगर n का rightChild -1 नहीं है, तो ret := ret AND dfs(rightChild[node], leftChild, rightChild, visited)

  • ret लौटाएं

  • मेन मेथड इस तरह होगा:

    • ret := dfs(0, leftChild, rightChild, visited)

    • allVisited := false सेट करें

    • i को 0 से n-1 तक लूप करें:

      • अगर i विजिटेड नहीं है, तो false लौटाएं

    • ret लौटाएं

उदाहरण (C++)

बेहतर समझ के लिए निम्न इम्प्लीमेंटेशन देखें:

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

class Solution {
public:
    bool dfs(int node, vector <int>& leftChild, vector <int>& rightChild, set <int>& visited){
        if(visited.count(node)) return false;
        visited.insert(node);
        bool ret = true;
        if(leftChild[node] != -1){
            ret &= dfs(leftChild[node], leftChild, rightChild, visited);
        }
        if(rightChild[node] != -1){
            ret &= dfs(rightChild[node], leftChild, rightChild, visited);
        }
        return ret;
    }
    bool validateBinaryTreeNodes(int n, vector<int>& leftChild, vector<int>& rightChild) {
        set <int> visited;
        bool ret = dfs(0, leftChild, rightChild, visited);
        bool allVisited = true;
        for(int i = 0; i < n; i++){
            if(!visited.count(i))return false;
        }
        return ret;
    }
};

int main(){
    vector<int> v1 = {1,-1,3,-1}, v2 = {2,-1,-1,-1};
    Solution ob;
    cout << (ob.validateBinaryTreeNodes(4, v1, v2));
}

इनपुट

4 [1,-1,3,-1] [2,-1,-1,-1]

आउटपुट

1

  1. C++ में बाइनरी ट्री के सभी फुल नोड्स प्रिंट करना C++ में बाइनरी ट्री के सभी फुल नोड्स प्रिंट करना

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

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

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

  1. C++ में बाइनरी ट्री में K लीफ वाले सभी नोड्स प्रिंट करना C++ में बाइनरी ट्री में K लीफ वाले सभी नोड्स प्रिंट करना

    इस समस्या में, हमें एक बाइनरी ट्री और एक पूर्णांक K दिया गया है और हमें बाइनरी ट्री के उन सभी नोड्स को प्रिंट करना है जिनके चाइल्ड सबट्री में K लीफ हैं। बाइनरी ट्री बाइनरी ट्री एक विशेष ट्री है जिसके प्रत्येक नोड में अधिकतम दो नोड्स होते हैं (एक/दो/कोई नहीं)। लीफ नोड बाइनरी ट्री का लीफ नोड ट्री क