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

বাইনারি ট্রিতে জোড়া গণনা যাদের যোগফল x C++-এ


আমাদের একটি ইন্টিজার ভ্যালু এবং একটি ভেরিয়েবল x দেওয়া আছে। টাস্ক হলো বাইনারি ট্রি নির্মাণ করা এবং সেই জোড়াগুলো খুঁজে বের করা যাদের যোগফল x-এর সমান।

ইনপুট

x = 5, ইনপুট ভ্যালুগুলো থেকে যে ট্রি তৈরি হবে वो নিচে দেওয়া আছে:

বাইনারি ট্রিতে জোড়া গণনা যাদের যোগফল x C++-এ

আউটপুট

Count of pairs in a binary tree whose sum is equal to a given value x are: 2

ব্যাখ্যা

আমাদের একটি ইন্টিজার অ্যারে দেওয়া আছে जिससे বাইনারি ট্রি তৈরি করা হয়েছে। আমরা চেক করব কোনো জোড়া আছে কিনা যাদের যোগফল x (৫) এর সমান। জোড়াগুলো হলো (2, 3) এবং (1, 4)।

ইনপুট

x = 8, ইনপুট ভ্যালুগুলো থেকে যে ট্রি তৈরি হবে वो নিচে দেওয়া আছে:

বাইনারি ট্রিতে জোড়া গণনা যাদের যোগফল x C++-এ

আউটপুট

Count of pairs in a binary tree whose sum is equal to a given value x are: 3

ব্যাখ্যা

আমাদের একটি ইন্টিজার অ্যারে দেওয়া আছে जिससे বাইনারি ট্রি তৈরি করা হয়েছে। আমরা চেক করব কোনো জোড়া আছে কিনা যাদের যোগফল x (৮) এর সমান। জোড়াগুলো হলো (2, 6), (4, 4) এবং (5, 3)।

প্রোগ্রামে ব্যবহৃত পদ্ধতি:

  • একটি নোড স্ট্রাকচার তৈরি করা হয় যাতে থাকে ডেটা পার্ট এবং লেফট, রাইট পয়েন্টার।
  • ইন্টিজার ভ্যালু ইনপুট নিয়ে লেফট ও রাইট পয়েন্টারের মাধ্যমে বাইনারি ট্রি তৈরি করা হয়।
  • x ভ্যালু ইনপুট নেওয়া হয় যা জোড়ার যোগফল হিসেবে ব্যবহার হবে।
  • একটি বুলিয়ান ফাংশন তৈরি করা হয় যা চেক করে জোড়ার যোগফল x কিনা।
  • ফাংশনের ভিতরে: রুট NULL হলে false রিটার্ন।
  • রুট != ptr এবং রুটের ডেটা + ptr-এর ডেটা == x হলে true রিটার্ন।
  • রিকারসিভলি চেক ফাংশন কল করা হয় লেফট এবং রাইট পয়েন্টারের জন্য।
  • total_pairs ফাংশন জোড়ার কাউন্ট গণনা করে।
  • ptr NULL হলে 0 রিটার্ন।
  • চেক ফাংশন true রিটার্ন করলে টোটাল পেয়ার বাড়ানো হয়।
  • রিকারসিভলি লেফট ও রাইট সাবট্রির জন্য কল করা হয়।
  • ফলাফল টোটাল ভেরিয়েবলে স্টোর করে প্রিন্ট করা হয়।

উদাহরণ

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

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

tree_node* create_node(int data) {
    tree_node* newNode = (tree_node*)malloc(sizeof(tree_node));
    newNode->data = data;
    newNode->left = newNode->right = NULL;
    return newNode;
}

bool check(tree_node* root, tree_node* ptr, int x) {
    if (root == NULL) {
        return false;
    }
    if (root != ptr && ((root->data + ptr->data) == x)) {
        return true;
    }
    if (check(root->left, ptr, x) || check(root->right, ptr, x)) {
        return true;
    }
    return false;
}

void total_pairs(tree_node* root, tree_node* ptr, int x, int& total) {
    if (ptr == NULL) {
        return;
    }
    if (check(root, ptr, x) == true) {
        total++;
    }
    total_pairs(root, ptr->left, x, total);
    total_pairs(root, ptr->right, x, total);
}

int main() {
    int x = 5;
    int total = 0;
    tree_node* root = create_node(5);
    root->left = create_node(2);
    root->right = create_node(3);
    root->left->left = create_node(1);
    root->left->right = create_node(4);
    root->right->left = create_node(6);
    total_pairs(root, root, x, total);
    total = total / 2;
    cout << "Count of pairs in a binary tree whose sum is equal to a given value x are: " << total;
    return 0;
}

আউটপুট

Count of pairs in a binary tree whose sum is equal to a given value x are: 2

  1. C++-এ বাইনারি ট্রির বাম পাতা নোডের যোগফল বের করা

  2. C++-এ বাইনারি ট্রি টিল্ট (Binary Tree Tilt) গণনা করা

  3. C++-এ সর্টেড ডাবলি লিংকড লিস্টে যেসব ট্রিপলেটের যোগফল x সেটির সংখ্যা গণনা

  4. C++-এ দুটি BST-র নোড জোড়া যাদের যোগফল x গণনা