ধরুন আমাদের একটি বাইনারি গাছ আছে আমাদের একটি প্রদত্ত বাইনারি গাছের সমস্ত সঠিক পাতার যোগফল খুঁজে বের করতে হবে৷
সুতরাং, যদি ইনপুট মত হয়
তাহলে আউটপুট হবে 17, কারণ বাইনারি গাছে দুটি ডান পাতা রয়েছে, যার মান যথাক্রমে 7 এবং 10।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ফাংশন সংজ্ঞায়িত করুন dfs(), এটি নোড, যোগ,
নেবে -
যদি নোড নাল হয়, তাহলে −
-
ফেরত
-
-
যদি নোডের বাম অংশটি নাল হয় এবং নোডের ডানদিকে শূন্য হয় এবং যোগ অ-শূন্য হয়, তাহলে −
-
ret :=ret + নোডের val
-
-
dfs(নোডের বাম, মিথ্যা)
-
dfs(নোডের ডান, সত্য)
-
প্রধান পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন -
-
ret :=0
-
dfs(রুট, সত্য)
-
রিটার্ন রিটার্ন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
#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 ret = 0; void dfs(TreeNode* node, bool add){ if(!node) return ; if(!node−>left && !node->right && add){ ret += node−>val; } dfs(node−>left, false); dfs(node−>right, true); } int solve(TreeNode* root) { ret = 0; dfs(root, true); return ret; } }; main(){ Solution ob; TreeNode *root = new TreeNode(3); root−>left = new TreeNode(9); root−>right = new TreeNode(10); root−>left−>left = new TreeNode(15); root−>left−>right = new TreeNode(7); cout << (ob.solve(root)); }
ইনপুট
TreeNode *root = new TreeNode(3); root−>left = new TreeNode(9); root−>right = new TreeNode(10); root−>left−>left = new TreeNode(15); root−>left−>right = new TreeNode(7);
আউটপুট
17