代码随想录算法训练营Day17

404.左叶子之和  513.找树左下角的值 112. 路径总和

404.左叶子之和

力扣题目链接

注意是左叶子节点,该节点没有其他子节点

class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        if(root == null) return 0;
        int lval = sumOfLeftLeaves(root.left);        //算左子树的左叶子
        if(root.left != null && root.left.left == null && root.left.right == null){
            lval = root.left.val;
        }
        int rval = sumOfLeftLeaves(root.right);       //左子树的左叶子
        return lval + rval;
    }
}

 

513.找树左下角的值

力扣题目链接

class Solution {
    private int val = 0;
    private int Deep = -1;
    public int findBottomLeftValue(TreeNode root) {
        findVal(root,0);
        return val;
    }
    public void findVal(TreeNode root,int deep){
        if(root == null)return ;
        if(root.left == null && root.right == null){
            if(deep > Deep){
                Deep = deep;
                val = root.val;
            }    
        }
        if(root.left != null)findVal(root.left , deep + 1);
        if(root.right != null) findVal(root.right , deep + 1);
    }
}

要知道最底层的话,需要另外设置Deep的值,进行比较。

112. 路径总和

力扣题目链接

class Solution {
    public boolean hasPathSum(TreeNode root, int targetSum) {
        if(root == null)return false;
        targetSum -= root.val;
        if(root.right == null && root.left == null){
            return targetSum == 0;        //判断到了叶子节点 总和是否正确
        }
        boolean left = hasPathSum(root.left,targetSum);
        boolean right = hasPathSum(root.right,targetSum);
        return left || right;
    }
}

你可能感兴趣的:(算法,算法)