Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> 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;
   }
};
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:
   TreeNode* prev = NULL;
   void flatten(TreeNode* root) {
      if(!root) return;
         flatten(root->right);
      flatten(root->left);
      root->right = prev;
      root->left = NULL;
      prev = root;
   }
};
main(){
   vector<int> v = {1,2,5,3,4};
   TreeNode *root = make_tree(v);
   Solution ob;
   (ob.flatten(root));
   TreeNode *ptr = root;
   while(ptr != NULL && ptr->val != 0){
      cout << ptr->val << ", ";
      ptr = ptr->right;
   }
}

इनपुट

{1,2,5,3,4}

आउटपुट

1, 2, 3, 4, 5,

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

    मान लीजिए हमारे पास एक बाइनरी ट्री है; हमें इसे जगह में लिंक्ड सूची में समतल करना होगा। तो अगर पेड़ जैसा है - आउटपुट ट्री होगा - इसे हल करने के लिए, हम इन चरणों का पालन करेंगे - सेवा पिछला:=शून्य एक पुनरावर्ती फ़ंक्शन हल () को परिभाषित करें, जो इनपुट के रूप में रूट लेगा। यदि रूट

  1. सी ++ प्रोग्राम में बाइनरी सर्च?

    द्विआधारी खोज, जिसे अर्ध-अंतराल खोज, लॉगरिदमिक खोज या बाइनरी चॉप के रूप में भी जाना जाता है, एक खोज एल्गोरिथ्म है जो एक क्रमबद्ध सरणी के भीतर लक्ष्य मान की स्थिति का पता लगाता है। बाइनरी खोज लक्ष्य मान की तुलना सरणी के मध्य तत्व से करती है। यदि वे समान नहीं हैं, तो आधा जिसमें लक्ष्य झूठ नहीं बोल सकत

  1. पायथन में लिंक की गई सूची को ज़िग-ज़ैग बाइनरी ट्री में बदलने का कार्यक्रम

    मान लीजिए कि हमारे पास एक एकल लिंक की गई सूची है, हमें इसे निम्नलिखित नियमों का उपयोग करके एक बाइनरी ट्री पथ में बदलना होगा - लिंक की गई सूची का प्रमुख मूल है। प्रत्येक बाद वाला नोड माता-पिता का बायां बच्चा होता है जब उसका मान कम होता है, अन्यथा यह सही बच्चा होगा। तो, अगर इनपुट [2,1,3,4,0,5] जैसा