LintCode 1254: Sum of Left Leaves

本文介绍了一种算法,用于求解给定二叉树中所有左叶子节点的值之和。通过递归方法,文章详细解释了如何遍历二叉树并计算符合条件的左叶子节点总和。

1254. Sum of Left Leaves

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

Example

Example 1

Input:

{3,9,20,#,#,15,7}

Output:24

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

    3

   / \

  9  20

    /  \

   15   7

Example 2:

Input:

{1,#,2,#,3}

Output:

0

Explanatinon:

1

  \

    2

      \

       3

 解法1:递归

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: t
     * @return: the sum of all left leaves
     */
    int sumOfLeftLeaves(TreeNode * root) {
        int leftSum = 0;
        dfs(root, leftSum);
        return leftSum;
    }

private:
    void dfs(TreeNode * root, int &leftSum) {
        if (!root) return;
        if (root->left && !root->left->left && !root->left->right) {
            leftSum += root->left->val;   
        } else {
            dfs(root->left, leftSum);
        } 
        dfs(root->right, leftSum);
    }
    
};

二刷:
 

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: t
     * @return: the sum of all left leaves
     */
    int sumOfLeftLeaves(TreeNode *root) {
        if (!root) return 0;
        TreeNode *node = root->left;
        if (node) {
            if (!node->left && !node->right) sum += node->val;
            else {
                sumOfLeftLeaves(root->left);
            }
        }
        sumOfLeftLeaves(root->right);
        return sum;
    }
private:
    int sum = 0;
};

上面是前序遍历。写成后序遍历当然也可以。

/**
 * Definition of TreeNode:
 * class TreeNode {
 * public:
 *     int val;
 *     TreeNode *left, *right;
 *     TreeNode(int val) {
 *         this->val = val;
 *         this->left = this->right = NULL;
 *     }
 * }
 */

class Solution {
public:
    /**
     * @param root: t
     * @return: the sum of all left leaves
     */
    int sumOfLeftLeaves(TreeNode *root) {
        if (!root) return 0;
        sumOfLeftLeaves(root->left);
        sumOfLeftLeaves(root->right);
        if (root->left && !root->left->left && !root->left->right) {
            sum += root->left->val;
        }

        return sum;
    }
private:
    int sum = 0;
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值