链接
https://leetcode-cn.com/problems/sum-of-left-leaves/
耗时
解题:20 min
题解:6 min
题意
计算给定二叉树的所有左叶子之和。
思路
dfs 到的每个节点,都检查当前节点的左子节点是不是叶节点,如果是返回左节点的值,如果不是继续遍历左子树。无论是不是都遍历右子树。最后返回 左右子树结果的加和。
时间复杂度: O ( n ) O(n) O(n)
AC代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int sumOfLeftLeaves(TreeNode* root) {
if(root == NULL) return 0;
int res_l = 0;
if(root->left != NULL) {
TreeNode* rl = root->left;
if(rl->left == NULL && rl->right == NULL) {
res_l = rl->val;
}
else {
res_l = sumOfLeftLeaves(root->left);
}
}
int res_r = sumOfLeftLeaves(root->right);
return res_l+res_r;
}
};