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

C++ में बाइनरी ट्री की सीमा


मान लीजिए हमारे पास एक बाइनरी ट्री है, हमें इसके सीमा के मानों को रूट से शुरू करके वामावर्त दिशा में ढूंढना है। यहां सीमा में बायां सीमा, पत्ते, और दायां सीमा क्रम में बिना डुप्लिकेट नोड्स के शामिल हैं।

  • बायां सीमा रूट से बाएं-सबसे नोड तक का पथ है।
  • दायां सीमा रूट से दाएं-सबसे नोड तक का पथ है।
  • जब रूट का बायां उपट्री या दायां उपट्री नहीं होता है, तो रूट स्वयं बायां सीमा या दायां सीमा होता है।

उदाहरण के लिए, यदि इनपुट दिए गए चित्र के अनुसार है, तो आउटपुट [1,2,4,7,8,9,10,6,3] होगा।

हल करने की विधि

हम तीन अलग-अलग ट्रैवर्सल का उपयोग करेंगे:

  • परिणाम सरणी ret परिभाषित करें।
  • leftBoundary(): नोड null या लीफ है तो लौटें; मान जोड़ें; बाएं बच्चे को प्राथमिकता दें, अन्यथा दाएं।
  • rightBoundary(): नोड null या लीफ है तो लौटें; दाएं बच्चे को प्राथमिकता दें, अन्यथा बाएं; वापसी पर मान जोड़ें (ताकि क्रम सही रहे)।
  • leaves(): नोड null है तो लौटें; यदि लीफ है तो मान जोड़ें; बाएं और दाएं पर रिकर्सिवली कॉल करें।
  • मुख्य विधि: ret साफ करें; यदि रूट null तो लौटाएं; रूट का मान जोड़ें; leftBoundary(रूट->बाएं); leaves(रूट->बाएं); leaves(रूट->दाएं); rightBoundary(रूट->दाएं); ret लौटाएं।

उदाहरण

बेहतर समझ के लिए निम्न कार्यान्वयन देखें:

#include <bits/stdc++.h> using namespace std; void print_vector(vector<auto> v){    cout << "[";    for(int i = 0; i<v.size(); i++){       cout << v[i] << ", ";    }    cout << "]"<<endl; } class TreeNode{    public:       int val;       TreeNode *left, *right;       TreeNode(int data){          val = data;          left = NULL;          right = NULL;       } }; void insert(TreeNode **root, int val){    queue<TreeNode*> q;    q.push(*root);    while(q.size()){       TreeNode *temp = q.front();       q.pop();       if(!temp->left){          if(val != NULL)             temp->left = new TreeNode(val);          else             temp->left = new TreeNode(0);          return;       }else{          q.push(temp->left);       }       if(!temp->right){          if(val != NULL)             temp->right = new TreeNode(val);          else             temp->right = new TreeNode(0);          return;       }else{          q.push(temp->right);       }    } } TreeNode *make_tree(vector<int> v){    TreeNode *root = new TreeNode(v[0]);    for(int i = 1; i<v.size(); i++){       insert(&root, v[i]);    }    return root; } class Solution { public:    vector<int> ret;    void leftBoundary(TreeNode* node){       if (!node || node->val == 0 || (!node->left && !node->right))          return;       ret.push_back(node->val);       if (node->left && node->left->val != 0)          leftBoundary(node->left);       else          leftBoundary(node->right);    }    void rightBoundary(TreeNode* node){       if (!node || node->val == 0 || (!node->left && !node->right))          return;       if (node->right && node->right->val != 0) {          rightBoundary(node->right);       }       else {          rightBoundary(node->left);       }       ret.push_back(node->val);    }    void leaves(TreeNode* node){       if (!node || node->val == 0)          return;       if (!node->left && !node->right) {          ret.push_back(node->val);       }       leaves(node->left);       leaves(node->right);    }    vector<int> boundaryOfBinaryTree(TreeNode* root){       ret.clear();       if (!root)          return ret;       ret.push_back(root->val);       leftBoundary(root->left);       leaves(root->left);       leaves(root->right);       rightBoundary(root->right);       return ret;    } }; main(){    Solution ob;    vector<int> v = {1,2,3,4,5,6,NULL,NULL,NULL,7,8,9,10};    TreeNode *root = make_tree(v);    print_vector(ob.boundaryOfBinaryTree(root)); }

इनपुट

{1,2,3,4,5,6,NULL,NULL,NULL,7,8,9,10}

आउटपुट

[1, 2, 4, 7, 8, 9, 10, 6, 3, ]

  1. C++ में अधिकतम बाइनरी ट्री निर्माण C++ में अधिकतम बाइनरी ट्री निर्माण

    मान लीजिए हमारे पास एक पूर्णांक सरणी है जिसके सभी तत्व अद्वितीय हैं। एक अधिकतम बाइनरी ट्री निम्न नियमों से बनता है: रूट सरणी का अधिकतम तत्व होता है। बायाँ सबट्री अधिकतम तत्व के बाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है। दायाँ सबट्री अधिकतम तत्व के दाएँ भाग से बने सबसरणी का अधिकतम ट्री होता है।

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

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

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

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