একটি বাইনারি ট্রি দেওয়া আছে। লক্ষ্য হল ট্রির সকল ডান পাশের লিফ নোড (Right Leaves) মানগুলোর যোগফল বের করা।
DFS রিকার্শন: নোড নাল হলে রিটার্ন। লিফ নোড হলে এবং ডান পাশে থাকলে (add=true) মান যোগ করা হয়। বাম সাবট্রিতে add=false, ডান সাবট্রিতে add=true দিয়ে রিকার্শন।
ট্রি ইনপুট: (চিত্রে দেখানো)
আউটপুট: ১৭ (ডান লিফ নোড ৭ এবং ১০-এর যোগফল)
#includeusing namespace std; class TreeNode{ public: int val; TreeNode *left, *right; TreeNode(int data){ val = data; left = 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; } }; int 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); return 0; }
উপরোক্ত কোড রান করলে আউটপুট:
17