404. Sum of Left Leaves(easy)

Easy

75084FavoriteShare

Find the sum of all left leaves in a given binary tree.

Example:

    3

   / \

  9  20

    /  \

   15   7

 

There are two left leaves in the binary tree, with values 9 and 15 respectively. Return 24.

 

C++:

/*
 * @Autor: SourDumplings
 * @Date: 2019-09-23 08:05:53
 * @Link: https://github.com/SourDumplings/
 * @Email: changzheng300@foxmail.com
 * @Description: https://leetcode.com/problems/sum-of-left-leaves/
 */

/**
 * 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)
    {
        int res = 0;
        doSumOfLeftLeaves(root, nullptr, res);
        return res;
    }

    void doSumOfLeftLeaves(TreeNode *x, TreeNode *p, int &res)
    {
        if (x)
        {
            if (!x->left && !x->right)
            {
                if (p && x == p->left)
                {
                    res += x->val;
                }
            }
            else
            {
                if (x->left)
                {
                    doSumOfLeftLeaves(x->left, x, res);
                }
                if (x->right)
                {
                    doSumOfLeftLeaves(x->right, x, res);
                }
            }
        }
    }
};

Java:

/*
 * @Autor: SourDumplings
 * @Date: 2019-09-23 08:12:07
 * @Link: https://github.com/SourDumplings/
 * @Email: changzheng300@foxmail.com
 * @Description: https://leetcode.com/problems/sum-of-left-leaves/
 */

/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode(int x) { val = x; }
* }
*/
class Solution
{
    private int res = 0;

    public int sumOfLeftLeaves(TreeNode root)
    {
        doSumOfLeftLeaves(root, null);
        return res;
    }

    public void doSumOfLeftLeaves(TreeNode x, TreeNode p)
    {
        if (x != null)
        {
            if (x.left == null && x.right == null)
            {
                if (p != null && x == p.left)
                {
                    res += x.val;
                }
            }
            else
            {
                if (x.left != null)
                {
                    doSumOfLeftLeaves(x.left, x);
                }
                if (x.right != null)
                {
                    doSumOfLeftLeaves(x.right, x);
                }
            }
        }
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值