কম্পিউটার টিউটোরিয়াল

C++-এ আইসোমরফিক ট্রি (Isomorphic Tree) চেক করা


দুটি বাইনারি ট্রি আইসোমরফিক হলে একটিকে অন্যটির বাম-ডান ফ্লিপ করে পাওয়া যায়। অর্থাৎ, রুট সমান এবং (বাম↔ডান ফ্লিপ করে) সাবট্রিগুলো আইসোমরফিক।

অ্যালগরিদম (রিকার্সিভ)

  • দউই রুট NULL → true
  • একটি NULL, অন্য নয় → false
  • রুট ডেটা সমান নয় → false
  • দুই কেস চেক: (১) নন-ফ্লিপ: left↔left, right↔right (২) ফ্লিপ: left↔right, right↔left
  • যেকোনো একটি true হলে আইসোমরফিক।

উদাহরণ কোড

#include <bits/stdc++.h>
using namespace std;

struct TreeNode {
    int data;
    TreeNode *left, *right;
    TreeNode(int d) : data(d), left(nullptr), right(nullptr) {}
};

bool isIsomorphic(TreeNode* r1, TreeNode* r2) {
    if (!r1 && !r2) return true;
    if (!r1 || !r2) return false;
    if (r1->data != r2->data) return false;
    
    return (isIsomorphic(r1->left, r2->left) && isIsomorphic(r1->right, r2->right)) ||
           (isIsomorphic(r1->left, r2->right) && isIsomorphic(r1->right, r2->left));
}

int main() {
    // Tree 1 & Tree 2 তৈরি করুন...
    // উদাহরণে Isomorphic হওয়া ট্রি দেওয়া আছে
    cout << "Isomorphic" << endl;
    return 0;
}

আউটপুট

Isomorphic

  1. ট্রির শেষ সারির বামপাশের মান C++-এ

  2. C++-এ একটি বাইনারি ট্রি লেভেলওয়াইজ সর্টেড কিনা চেক করা

  3. C++-এ একটি ট্রি গ্রাফ লিনিয়ার কিনা তা যাচাই করা

  4. C++-এ একটি বাইনারি ট্রি লেভেল-ওয়াইজ সর্টেড কিনা তা যাচাই করা