
解题思路:递归解决
结束条件:传入结点为NULL
1.若结点有左孩子值且其左孩子为叶子结点,sum+=左孩子值
2.递归进入左子树和右子树
3.返回sum和递归的值
int isLeaf(struct TreeNode* node) {
return !node->left && !node->right;
}
int sumOfLeftLeaves(struct TreeNode* root){
int sum = 0;
if(!root)
return sum;
if(root->left && isLeaf(root->left))
sum += root->left->val;
return sum + sumOfLeftLeaves(root->left) + sumOfLeftLeaves(root->right);
}

解题思路:迭代法解决
1.入栈根结点
2.当栈中有结点时,出栈栈顶结点:
1.若栈顶结点有左孩子且左孩子为叶子,sum+=左孩子值
2.入栈该结点左右孩子结点
3.返回sum
int isLeaf(struct TreeNode* node) {
return !node->left && !node->right;
}
int sumOfLeftLeaves(struct TreeNode* root){
if(!root)
return 0;
struct TreeNode* stack[1024];
int stack_top = 0;
stack[stack_top++] = root;
int sum = 0;
while(stack_top) {
struct TreeNode* temp = stack[--stack_top];
if(temp->left && isLeaf(temp->left)) {
sum+=temp->left->val;
}
if(temp->right)
stack[stack_top++] = temp->right;
if(temp->left)
stack[stack_top++] = temp->left;
}
return sum;
}
