একটি বাইনারি ট্রি যেটির সর্বোচ্চ দুটি চাইল্ড থাকে, যাদের বাম চাইল্ড ও ডান চাইল্ড বলে নির্দিষ্ট করা হয়। এটি বাইনারি ট্রিতে লouest কমন আনসেস্টর (LCA) বের করার একটি C++ প্রোগ্রাম।
অ্যালগরিদম
শুরু d ডেটা, l বাম চাইল্ড পয়েন্টার ও r ডান চাইল্ড পয়েন্টার ঘোষণা করতে n স্ট্রাকচার তৈরি করুন। নিউনোড তৈরির ফাংশন তৈরি করুন। LCA() ফাংশন কল করুন বাইনারি ট্রিতে লouest কমন আনসেস্টর বের করতে: নোড n1 ও n2 ট্রিতে আছে ধরে নিন। যদি root নাল হয়, তবে রিটার্ন করুন। যদি root নাল না হয় তবে দুটি কেস থাকে। a) যদি n1 ও n2 দুটোই root-তে ছোট হয়, তবে LCA বাম পাশে আছে। b) যদি n1 ও n2 দুটোই root-তে বড় হয়, তবে LCA ডান পাশে আছে। শেষ।
উদাহরণ কোড
#include <iostream> using namespace std; struct n { int d; struct n* l, *r; }*p = NULL; struct n* newnode(int d) { p = new n; p->d = d; p->l = p->r = NULL; return(p); } struct n *LCA(struct n* root, int n1, int n2) { if (root == NULL) return NULL; if (root->d > n1 && root->d > n2) return LCA(root->l, n1, n2); if (root->d < n1 && root->d < n2) return LCA(root->r, n1, n2); return root; } int main() { n* root = newnode(9); root->l = newnode(7); root->r = newnode(10); root->l->l = newnode(6); root->r->l = newnode(8); root->r->r = newnode(19); root->r->l->r = newnode(4); root->r->r->r = newnode(20); int n1 = 20, n2 = 4; struct n *t = LCA(root, n1, n2); cout << "20 এবং 4-এর লouest কমন আনসেস্টর: " << t->d << endl; n1 = 7, n2 = 6; t = LCA(root, n1, n2); cout << "7 এবং 6-এর লouest কমন আনসেস্টর: " << t->d << endl; }আউটপুট
20 এবং 4-এর লouest কমন আনসেস্টর: 9 7 এবং 6-এর লouest কমন আনসেস্টর: 7