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

C++-এ সিমেট্রিক ট্রি (Symmetric Tree) চেক করার অ্যালগরিদম


একটি বাইনারি ট্রি যদি নিজের মিরর ইমেজ তৈরি করে, তবে তাকে সিমেট্রিক ট্রি বলা হয়। অর্থাৎ, বাম সাবট্রি এবং ডান সাবট্রি একে অপরের মিরর হবে।

অ্যালগরিদম

  • রিকার্সিভ হেল্পার ফাংশন যা দুটি নোড (রুট1, রুট2) নেয়।
  • দউই নোড NULL হলে true রিটার্ন।
  • একটি NULL, অন্য নয় হলে false।
  • ডেটা সমান হলে: বামের বাম ↔ ডানের ডান এবং বামের ডান ↔ ডানের বাম রিকার্সিভলি চেক।

উদাহরণ কোড

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

struct TreeNode {
    int data;
    TreeNode *left, *right;
};

TreeNode* createNode(int d) {
    TreeNode* root = new TreeNode;
    root->data = d;
    root->left = root->right = NULL;
    return root;
}

bool helper(TreeNode* root1, TreeNode* root2) {
    if (!root1 && !root2) return true;
    if (!root1 || !root2) return false;
    return (root1->data == root2->data) &&
           helper(root1->left, root2->right) &&
           helper(root1->right, root2->left);
}

bool isSymmetric(TreeNode* root) {
    return helper(root, root);
}

int main() {
    TreeNode* root = createNode(4);
    root->left = createNode(2);
    root->right = createNode(2);
    root->left->left = createNode(5);
    root->left->right = createNode(7);
    root->right->left = createNode(5);
    root->right->right = createNode(7);
    
    cout << (isSymmetric(root) ? "True" : "False") << endl;
    return 0;
}

আউটপুট

True

দেওয়া ট্রিটি সিমেট্রিক, তাই আউটপুট True।


  1. C++-এ বাইনারি ট্রি লেভেল অর্ডার ট্রাভার্সাল

  2. C++-এ বাইনারি সার্চ ট্রির সব জোড় নোড প্রিন্ট করা

  3. C++-এ বাইনারি সার্চ ট্রির সব বিজোড় নোড প্রিন্ট করা

  4. বাইনারি ট্রিতে রুট থেকে নির্দিষ্ট নোডের দূরত্ব বের করা C++-তে