বাইনারি ট্রিতে যেসব লিফ নোড তার পেরেন্টের বাম পাশে আছে, তাদের যোগফল বের করতে হবে।
অ্যালগরিদম (রিকার্সিভ)
- বেস কেস: রুট NULL হলে ০ রিটার্ন।
- যদি রুটের বাম চাইল্ড লিফ হয় (দুই চাইল্ডই NULL), তবে তার মান + ডান সাবট্রির রিকার্সিভ কল।
- অন্যথায় বাম ও ডান সাবট্রির রিকার্সিভ কল যোগ করুন।
উদাহরণ কোড
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int data;
TreeNode *left, *right;
TreeNode(int d) : data(d), left(nullptr), right(nullptr) {}
};
int leftLeafSum(TreeNode* root) {
if (!root) return 0;
if (root->left && !root->left->left && !root->left->right) {
return root->left->data + leftLeafSum(root->right);
}
return leftLeafSum(root->left) + leftLeafSum(root->right);
}
int main() {
TreeNode* root = new TreeNode(4);
root->left = new TreeNode(2);
root->right = new TreeNode(2);
root->left->left = new TreeNode(5);
root->left->right = new TreeNode(7);
root->right->left = new TreeNode(5);
root->right->right = new TreeNode(7);
cout << leftLeafSum(root) << endl; // 5+5=10
return 0;
}
আউটপুট
10
বাম লিফ নোডগুলো: ৫ এবং ৫। যোগফল = ১০।