ধরুন আমাদের একটি বাইনারি গাছ আছে; আমাদের এর গভীরতম পাতার মানের সমষ্টি খুঁজে বের করতে হবে। তাই গাছটি যদি −
এর মত হয়

তাহলে আউটপুট হবে 11।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি মানচিত্র m, এবং maxDepth
সংজ্ঞায়িত করুন -
একটি পুনরাবৃত্ত পদ্ধতি সংজ্ঞায়িত করুন সমাধান(), এটি নোড এবং স্তর গ্রহণ করবে, প্রাথমিকভাবে স্তরটি 0
-
যদি নোড উপস্থিত না থাকে, তাহলে ফিরুন
-
maxDepth :=লেভেলের সর্বোচ্চ এবং maxDepth
-
নোডের মান দ্বারা m[স্তর] বাড়ান
-
সমাধান (নোডের বামে, স্তর + 1)
-
সমাধান (নোডের ডানদিকে, স্তর + 1)
-
মূল পদ্ধতিতে, maxDepth :=0 সেটআপ করুন, তারপর সমাধান করুন(root, 0)
-
ফিরুন m[maxDepth]
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
class TreeNode{
public:
int val;
TreeNode *left, *right;
TreeNode(int data){
val = data;
left = NULL;
right = NULL;
}
};
class Solution {
public:
int maxDepth;
map <int, int> m;
void solve(TreeNode* node, int level = 0){
if(!node)return;
maxDepth = max(level, maxDepth);
m[level] += node->val;
solve(node->left, level + 1);
solve(node->right, level + 1);
}
int deepestLeavesSum(TreeNode* root) {
maxDepth = 0;
m.clear();
solve(root);
return m[maxDepth];
}
};
main(){
TreeNode *root = new TreeNode(1);
root−>left = new TreeNode(2);
root−>right = new TreeNode(3);
root−>left−>left = new TreeNode(4);
root−>left−>right = new TreeNode(5);
root−>right−>right = new TreeNode(6);
root−>right−>right−>right = new TreeNode(4);
root−>left−>left−>left = new TreeNode(7);
Solution ob;
cout << (ob.deepestLeavesSum(root));
} ইনপুট
TreeNode *root = new TreeNode(1); root−>left = new TreeNode(2); root−>right = new TreeNode(3); root−>left−>left = new TreeNode(4); root−>left−>right = new TreeNode(5); root−>right−>right = new TreeNode(6); root−>right−>right−>right = new TreeNode(4); root−>left−>left−>left = new TreeNode(7);
আউটপুট
11