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

C++ में बॉटम लेफ्ट ट्री वैल्यू का पता लगाएं

मान लीजिए कि हमारे पास एक बाइनरी ट्री है। हमें उस पेड़ की अंतिम पंक्ति का सबसे बाईं ओर का मान ज्ञात करना है। तो अगर पेड़ जैसा है -

C++ में बॉटम लेफ्ट ट्री वैल्यू का पता लगाएं


तब आउटपुट 7 होगा, क्योंकि अंतिम पंक्ति [7, 4] है, और सबसे बाएं तत्व 7 है।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • प्रारंभ में ans और lvl वैरिएबल को 0 के रूप में परिभाषित करें

  • हल () नामक एक विधि को परिभाषित करें, यह ट्री नोड लेगा, और स्तर, स्तर शुरू में 0 है। यह निम्नानुसार कार्य करेगा -

  • यदि नोड शून्य है, तो वापस लौटें

  • यदि स्तर> lvl, तो उत्तर:=नोड और lvl का मान:=स्तर

  • हल करें (नोड के बाएं, स्तर + 1)

  • हल करें (नोड का अधिकार, स्तर + 1)

  • मुख्य भाग में, lvl सेट करें:=-1, कॉल सॉल्व (रूट), और रिटर्न ans

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

उदाहरण

#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:
   int ans;
   int lvl;
   void solve(TreeNode* node, int level = 0){
      if(!node || node->val == 0) return;
      if(level > lvl){
         ans = node->val;
         lvl = level;
      }
      solve(node->left, level + 1);
      solve(node->right, level + 1);
   }
   int findBottomLeftValue(TreeNode* root) {
      lvl = -1;
      solve(root);
      return ans;
   }
};
main(){
   vector<int> v = {3,5,1,6,2,0,8,NULL,NULL,7,4};
   TreeNode *tree = make_tree(v);
   Solution ob;
   cout <<(ob.findBottomLeftValue(tree));
}

इनपुट

[3,5,1,6,2,0,8,null,null,7,4]

आउटपुट

7

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

    मान लीजिए कि हमारे पास एक पूर्णांक सरणी है। उस सरणी के सभी तत्व अद्वितीय हैं। इस सरणी पर अधिकतम वृक्ष निर्माण को निम्नानुसार परिभाषित किया गया है - जड़ सरणी में अधिकतम संख्या धारण करेगा। लेफ्ट सबट्री सबएरे के बायीं ओर से निर्मित अधिकतम ट्री है जिसे अधिकतम संख्या से विभाजित किया जाता है। दाय

  1. C++ में प्रत्येक ट्री पंक्ति में सबसे बड़ा मान ज्ञात करें

    मान लीजिए कि हमारे पास एक बाइनरी ट्री है, तो हमें उस पेड़ के प्रत्येक स्तर के सबसे बड़े तत्वों को खोजना होगा। तो अगर पेड़ जैसा है - तब आउटपुट [3,5,8] . होगा इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - एक सरणी परिभाषित करें जिसे उत्तर कहा जाता है एक पुनरावर्ती फ़ंक्शन को परिभाषित कर

  1. C++ में बाइनरी सर्च ट्री में न्यूनतम मान वाला नोड खोजें

    मान लीजिए कि हमारे पास एक बाइनरी सर्च ट्री है। हमें बाइनरी सर्च ट्री में न्यूनतम तत्व खोजना है। तो अगर बीएसटी नीचे जैसा है - न्यूनतम तत्व 1 होगा। जैसा कि हम जानते हैं कि लेफ्ट सबट्री में हमेशा छोटे तत्व होते हैं। इसलिए यदि हम बाएं सबट्री को बार-बार पार करते हैं जब तक कि बाईं ओर शून्य न हो, हम सब