কম্পিউটার

C++ এ স্ট্রিং থেকে বাইনারি ট্রি তৈরি করুন


ধরুন আমাদের একটি স্ট্রিং আছে যেটিতে বন্ধনী এবং পূর্ণসংখ্যা রয়েছে। আমাদের সেই স্ট্রিং থেকে একটি বাইনারি গাছ তৈরি করতে হবে। পুরো ইনপুট একটি বাইনারি গাছ প্রতিনিধিত্ব করে। এটি একটি পূর্ণসংখ্যা ধারণ করে যার পরে শূন্য, এক বা দুই জোড়া বন্ধনী রয়েছে। পূর্ণসংখ্যাটি মূলের মানকে প্রতিনিধিত্ব করে এবং এক জোড়া বন্ধনীতে একই কাঠামোর সাথে একটি শিশু বাইনারি গাছ রয়েছে।

সুতরাং, যদি ইনপুটটি "4(2(3)(1))(6(5))" এর মত হয়, তাহলে আউটপুট হবে [3,2,1,4,5,6] (অর্ডার ট্রাভার্সাল)

C++ এ স্ট্রিং থেকে বাইনারি ট্রি তৈরি করুন

এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -

  • একটি ফাংশন সল্ভ(), এটি s, idx,

    লাগবে
  • যদি idx>=s এর আকার হয়, তাহলে −

    • রিটার্ন নাল

  • সংখ্যা :=খালি স্ট্রিং

  • যখন (idx

    • num :=num + s[idx]

    • (আইডিএক্স 1 দ্বারা বাড়ান)

  • নোড =মান সংখ্যা সহ নতুন নোড

  • যদি idx

    • (আইডিএক্স 1 দ্বারা বাড়ান)

    • নোডের বাম :=সমাধান(s, idx)

    • (আইডিএক্স 1 দ্বারা বাড়ান)

    • যদি idx

      • (আইডিএক্স 1 দ্বারা বাড়ান)

      • নোডের ডানদিকে :=সমাধান (s, idx)

      • (আইডিএক্স 1 দ্বারা বাড়ান)

  • রিটার্ন নোড

  • প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন -

  • idx :=0

  • temp =মান -1

    সহ নতুন নোড
  • রিটার্ন সলভ(s, idx)

উদাহরণ (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 inord(TreeNode *root){
   if(root != NULL){
      inord(root->left);
      cout << root->val << " ";
      inord(root->right);
   }
}
class Solution {
public:
   TreeNode* solve(string s, int& idx){
      if (idx >= s.size())
         return NULL;
      string num = "";
      while (idx < s.size() && s[idx] != '(' && s[idx] != ')') {
         num += s[idx];
         idx++;
      }
      TreeNode* node = new TreeNode(stoi(num));
      if (idx < s.size() && s[idx] == '(') {
         idx++;
         node->left = solve(s, idx);
         idx++;
         if (idx < s.size() && s[idx] == '(') {
            idx++;
            node->right = solve(s, idx);
            idx++;
         }
      }
      return node;
   }
   TreeNode* str2tree(string s) {
      int idx = 0;
      TreeNode* temp = new TreeNode(-1);
      return solve(s, idx);
   }
};
main(){
   Solution ob;
   TreeNode *root = ob.str2tree("4(2(3)(1))(6(5))");
   inord(root);
}

ইনপুট

"4(2(3)(1))(6(5))"

আউটপুট

3 2 1 4 5 6

  1. C++ এ বাইনারি সার্চ ট্রি পুনরুদ্ধার করুন

  2. C++ এ বাইনারি ট্রি প্রিন্ট করুন

  3. C++ এ বাইনারি ট্রি প্রুনিং

  4. পাইথনে বাইনারি ট্রি থেকে স্ট্রিং তৈরি করুন