1.问题

        404. 左叶子之和 - 力扣(LeetCode)

给定二叉树的根节点 root ,返回所有左叶子之和。

示例 1:

输入: root = [3,9,20,null,null,15,7] 
输出: 24 
解释: 在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24

示例 2:

输入: root = [1]
输出: 0
2.思路

如何找二叉树的左叶子,需要通过父节点来判断。如果root->left存在并且root->left->left与root->left->right不存在,则root->left为左叶子。

遍历整个二叉树找到所有的左叶子然后累加即可。递归一般采用后序遍历(左右根)。在递归过程中累加左叶子值。

3.代码实现
    int sumOfLeftLeaves(TreeNode* root) {
        if(root==nullptr) return 0;  //当前节点为空,直接返回
        if(root->left==nullptr&&root->right==nullptr) return 0; //当前节点的左右子节点都不存在,也直接返回(这一行可以不行,程序会多遍历一层叶子节点)

        int leftValue = sumOfLeftLeaves(root->left); //左子树

        if(root->left&&!root->left->left&&!root->left->right){ //找到左叶子,赋值
            leftValue = root->left->val;
        }

        int rightValue = sumOfLeftLeaves(root->right); //右子树
    
        int sum = leftValue+rightValue;  //累加
        return sum;
    }

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐