左叶子之和

左叶子之和

一、题目描述

给定一个二叉树根节点,返回所有左叶子之和。
示例1

输入: root = [3,9,20,null,null,15,7] 
输出: 24 

示例2

输入: root = [1]
输出: 0

二、解题思路

采用递归遍历每一个叶子节点,并相加左叶子节点即可。

三、解题方法

方法1(前序遍历)
将二叉树前序遍历,遇到左叶子节点就累加,即可。
代码实现:

class Solution {
    int res = 0;
    public int sumOfLeftLeaves(TreeNode root) {
        def(root,false);
        return res;
    }

    public void def(TreeNode node,boolean isLeft){
        
        if(node == null){
            return;
        }

        if(node.left == null && node.right == null && isLeft){
            res += node.val;
        }

        def(node.left,true);
        def(node.right,false);

    }
}

方法二(深度优先)
代码实现:

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        return dfs(root);
    }

    public int dfs(TreeNode  root){
        int res = 0;
        if(root.left != null){
            res += isLeftNode(root.left) ? root.left.val: dfs(root.left);
        }

        if(root.right != null && !isLeftNode(root.right)){
            res += dfs(root.right);
        }

        return res;
    }


    public boolean isLeftNode(TreeNode node){
        return node!=null && node.left==null && node.right==null;
    }
}
posted @ 2022-11-25 13:04  z_coding  阅读(30)  评论(0)    收藏  举报