[二叉树|深搜|dfs] leetcode 404 左叶子之和
1.题目
题目链接
计算给定二叉树的所有左叶子之和。
示例:
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
2.分析
2.1.怎么判断左叶子
首先得判断是否为叶子。叶子的左子结点与右子结点均为空,因此有:
bool isLeaf(TreeNode* node) {
return !node->left && !node->right;
}
而判断该叶子是否为左叶子,只需要判断其是否为父结点的左子结点:
if(isLeaf(node->left)){
}
2.2.dfs过程
直接利用二叉树的深度优先搜索框架:
int dfs(TreeNode* node){
int res = 0;
if(node->left) { //搜索左子树
res += dfs(node->left);
//do something...
}
if(node->right) { //搜索右子树
res += dfs(node->right);
//do something...
}
return res;
}
3.代码
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
return !root ? 0 : dfs(root);
}
int dfs(TreeNode* node){
int res = 0;
if(node->left) {
if(isLeaf(node->left)){
res += node->left->val;
}else{
res += dfs(node->left);
}
}
if(node->right) {
res += dfs(node->right);
}
return res;
}
bool isLeaf(TreeNode* node) {
return !node->left && !node->right;
}
};