สมมติว่าเรามีไบนารีทรี เราต้องหาผลรวมของใบไม้ที่ถูกต้องทั้งหมดในไบนารีทรีที่กำหนด
ดังนั้นหากอินพุตเป็นแบบ

จากนั้นผลลัพธ์จะเป็น 17 เนื่องจากมีใบทางขวาสองใบในไบนารีทรี โดยมีค่า 7 และ 10 ตามลำดับ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน dfs() สิ่งนี้จะรับโหนด เพิ่ม
-
ถ้าโหนดเป็นโมฆะ −
-
กลับ
-
-
หากด้านซ้ายของโหนดเป็นโมฆะและด้านขวาของโหนดเป็นโมฆะและการบวกไม่ใช่ศูนย์ −
-
ret :=ret + val ของโหนด
-
-
dfs (ด้านซ้ายของโหนด เท็จ)
-
dfs(ทางขวาของโหนด จริง)
-
จากวิธีหลัก ให้ทำดังนี้ −
-
ยกเลิก :=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