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

C++-এ রুট থেকে দুটি নোডের কমন পূর্বপুরুষ (কমন আনসেস্ট্র) প্রিন্ট করুন

একটি বাইনারি ট্রি এবং দুটি নোড দেওয়া আছে। রুট থেকে উভয় নোড পর্যন্ত পথে কমন নোডগুলো (কমন আনসেস্ট্র) প্রিন্ট করতে হবে।

উদাহরণ: ট্রিতে নোড ০ এবং ৬-এর কমন আনসেস্ট্র: 3, 2।

অ্যালগরিদম
  1. দুটি নোডের Lowest Common Ancestor (LCA) বের করুন।
  2. LCA থেকে রুট পর্যন্ত পথে পড়া সব নোড প্রিন্ট করুন (LCA সহ)।
উদাহরণ কোড
#include <iostream>
using namespace std;

struct Node {
    struct Node* left, *right;
    int key;
};

Node* insertNode(int key) {
    Node* temp = new Node;
    temp->key = key;
    temp->left = temp->right = NULL;
    return temp;
}

struct Node* LowestCommonAncestors(struct Node* root, int n1, int n2) {
    if (root == NULL) return NULL;
    if (root->key == n1 || root->key == n2) return root;
    Node* left_lca = LowestCommonAncestors(root->left, n1, n2);
    Node* right_lca = LowestCommonAncestors(root->right, n1, n2);
    if (left_lca && right_lca) return root;
    return (left_lca != NULL) ? left_lca : right_lca;
}

bool printAncestorNodes(struct Node* root, int target) {
    if (root == NULL) return false;
    if (root->key == target) {
        cout << root->key << "\t";
        return true;
    }
    if (printAncestorNodes(root->left, target) || printAncestorNodes(root->right, target)) {
        cout << root->key << "\t";
        return true;
    }
    return false;
}

bool printcommonAncestors(struct Node* root, int first, int second) {
    struct Node* LCA = LowestCommonAncestors(root, first, second);
    if (LCA == NULL) return false;
    printAncestorNodes(root, LCA->key);
}

int main() {
    Node* root = insertNode(24);
    root->left = insertNode(8);
    root->right = insertNode(69);
    root->left->left = insertNode(12);
    root->left->right = insertNode(41);
    root->right->left = insertNode(50);
    root->right->right = insertNode(3);
    root->left->left->left = insertNode(22);
    root->right->left->left = insertNode(10);
    root->right->left->right = insertNode(6);
    if (printcommonAncestors(root, 6, 3) == false)
        cout << "No Common nodes";
    return 0;
}
আউটপুট
69 24
  1. C++-এ বাইনারি সার্চ ট্রির সব বিজোড় নোড প্রিন্ট করা

  2. BFS ব্যবহার করে সোর্স থেকে ডেস্টিনেশন পর্যন্ত সব পথ প্রিন্ট করা C++-তে

  3. C++ প্রোগ্রামিং-এ বাইনারি ট্রিতে যেকোনো দুটি নোডের পথ প্রিন্ট করা

  4. C++ প্রোগ্রামিং-এ বাইনারি ট্রিতে প্রথম ছোটো রুট-টু-লিফ পথ প্রিন্ট করা