一:题目
二:思路
1:怎么判断一个值是不是左叶子?
解释:
a:单纯的判断一个将节点的左右节点为空,只能确认它是叶子节点,而不能保证它是左叶子。
b:所以我们需要在叶子节点的上一层就开始进行判断,其左孩子存在且左孩子为叶子节点,该左孩子才是 左叶子。
三:代码
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int sumOfLeftLeaves(struct TreeNode* root) {
//对接收的空节点的处理
if (root == NULL)
return 0;
int sum = 0;
//1:root的左孩子存在
//2:并且左孩子是叶子
if (root->left && root->left->left == NULL && root->left->right == NULL)
{ //将其值累加进sum
sum = root->left->val;
}
//sum+左子树的左叶子的值+ 右子树的左叶子的值
return sum + sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
}
四:递归展开
只展示了左子树