কম্পিউটার

C++ এ বাইনারি ট্রিতে কাজিন


ধরুন আমাদের একটি বাইনারি গাছ আছে, রুট নোডটি গভীরতা 0 এ উপস্থিত রয়েছে এবং প্রতিটি k নোডের বাচ্চারা k+1 গভীরতায় রয়েছে।

এখানে একটি বাইনারি গাছের দুটি নোডকে কাজিন বলা হয় যদি তাদের গভীরতা একই থাকে তবে তাদের পিতামাতা আলাদা।

গাছের সমস্ত মান অনন্য হবে, এবং গাছের দুটি ভিন্ন নোডের x এবং y মান। x এবং y মানের সাথে সম্পর্কিত নোডগুলি কাজিন কিনা তা আমাদের পরীক্ষা করতে হবে।

সুতরাং, যদি ইনপুট মত হয়

C++ এ বাইনারি ট্রিতে কাজিন

x =5, y =4, তাহলে আউটপুট সত্য হবে

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

  • একটি মানচিত্র um

    সংজ্ঞায়িত করুন
  • এক সারি q

    সংজ্ঞায়িত করুন
  • q

    -এ রুট সন্নিবেশ করান
  • um[x] :=um[y] :=শূন্য

  • যখন (q খালি নয়), −

    করুন
    • qSize :=q এর আকার

    • যখন qSize> 0 তারপর (qSize 1 দ্বারা কমিয়ে দিন), −

      করুন
      • cur :=q এর প্রথম উপাদান

      • q

        থেকে উপাদান মুছুন
      • যদি curr এর বাম উপস্থিত থাকে, তাহলে −

        • যদি um-এর cur এর বাম দিকের মান থাকে, তাহলে

          • um[cur এর বাম দিকের মান] :=cur

        • অন্যথায়

          • q

            -এ cur-এর বাঁদিকে ঢোকান
        • যদি um এর cur এর অধিকারের মান থাকে, তাহলে

          • um[cur এর অধিকারের মান] :=cur

        • অন্যথায়

          • q

            -এ cur-এর ডানদিকে সন্নিবেশ করান
      • যদি um[x] বা um[y] অ-শূন্য হয়, তাহলে −

        • যদি um[x] 0 হয় বা um[y] 0 হয় বা um[x] হয় um[y] এর মতো, তাহলে −

          • মিথ্যা ফেরত দিন

        • অন্যথায়

          • প্রত্যাবর্তন সত্য

  • মিথ্যা ফেরত দিন

উদাহরণ

আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -

#include <bits/stdc++.h>
using namespace std;
class TreeNode {
public:
   int val;
   TreeNode *left, *right;
   TreeNode(int data) {
      val = data;
      left = NULL;
      right = NULL;
   }
};
class Solution {
public:
   bool isCousins(TreeNode *root, int x, int y) {
      unordered_map<int, TreeNode *> um;
      queue<TreeNode *> q;
      q.push(root);
      um[x] = um[y] = NULL;
      while (!q.empty()) {
         int qSize = q.size();
         while (qSize-- > 0) {
            auto cur = q.front();
            q.pop();
            if (cur->left && cur->left->val != 0)
               if (um.count(cur->left->val))
                  um[cur->left->val] = cur;
               else
                  q.push(cur->left);
            if (cur->right && cur->right->val != 0)
               if (um.count(cur->right->val))
                  um[cur->right->val] = cur;
               else
                  q.push(cur->right);
         }
         if (um[x] or um[y])
            if (!um[x] or !um[y] or um[x] == um[y])
               return false;
            else
               return true;
      }
      return false;
   }
};
main() {
   Solution ob;
   TreeNode *root = new TreeNode(1);
   root->left = new TreeNode(2); root->right = new TreeNode(3);
   root->left->right = new TreeNode(4); root->right->right = new TreeNode(5);
   cout << (ob.isCousins(root, 5, 4));
}

ইনপুট

TreeNode *root = new TreeNode(1);
root->left = new TreeNode(2); root->right = new TreeNode(3);
root->left->right = new TreeNode(4); root->right->right = new
TreeNode(5);
cout << (ob.isCousins(root, 5, 4));

আউটপুট

1

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

  2. C++ এ বাইনারি ট্রির সর্বোচ্চ প্রস্থ

  3. C++ এ সর্বাধিক বাইনারি ট্রি

  4. C++ এ বাইনারি ট্রি থেকে বাইনারি সার্চ ট্রি কনভার্সন