【二叉树】左叶子之和

解题思路:递归解决

结束条件:传入结点为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;
}