6.11左叶子之和(LC404-E)

用java定义树:

public class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;
//一个空构造方法`TreeNode()`,用于初始化节点的默认值。
    TreeNode() {}
//一个构造方法`TreeNode(int val)`,用于初始化节点的值,并设置默认的左右子节点。
    TreeNode(int val) { this.val = val; }
//一个构造方法`TreeNode(int val, TreeNode left, TreeNode right)`,用于初始化节点的值、左子节点和右子节点。
    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }
}

在Java中,每个源代码文件只能包含一个公共类。这意味着在一个源代码文件中,只能有一个类被声明为公共类(使用 `public class` 关键字)。

该公共类的名称必须与文件名相匹配,以确保编译器能够正确识别和加载该类。

然而,一个源代码文件可以包含多个非公共类(非公共类没有使用 `public` 修饰符)。这些非公共类可以在同一个文件中定义,并且可以被同一个包中的其他类访问和使用。

虽然一个源代码文件只能有一个公共类,但可以在同一个项目中有多个源代码文件,每个文件都包含一个公共类。这样可以通过在不同的文件中定义不同的公共类来组织和管理代码。

总结起来,一个源代码文件只能包含一个公共类,但可以包含多个非公共类。通过使用多个源代码文件,可以在一个项目中拥有多个公共类。

题目:

6.11左叶子之和(LC404-E)_第1张图片

算法:

我们可以很容易得判断叶子节点,但是难以判断左叶子。

可以这样判断:

6.11左叶子之和(LC404-E)_第2张图片

20.left.left==null && 20.left != null && 20.left.right==null

这道题适合后序遍历(LRV),最后把值传到根节点。

正确代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public int sumOfLeftLeaves(TreeNode root) {
        //首先判断root是否为空
        //JAVA的if判断要用括号,无冒号
        if (root == null) return 0;
        //递归调用`sumOfLeftLeaves`方法计算左子树的左叶子节点
        int leftnum = sumOfLeftLeaves(root.left);
        //递归调用`sumOfLeftLeaves`方法计算右子树的左叶子节点
        int rightnum = sumOfLeftLeaves(root.right);
        //判断当前节点的左子节点是否存在,且它的左子节点和右子节点都为null。
        //如果满足这个条件,说明当前节点的左子节点是一个左叶子节点,将其值赋给`midnum`。
        int midnum = 0;
        if (root.left != null && root.left.left == null && root.left.right == null)
        midnum = root.left.val;
        int sum = leftnum + rightnum + midnum;
        return sum;

    }
}

注意:

每次写完后面都要加“;”

每出现一个新变量,都要声明其类型

时间空间复杂度:

这段代码的时间复杂度为O(n),其中n是二叉树中的节点数量。这是因为代码使用递归方式遍历整个二叉树,每个节点都会被访问一次。

空间复杂度取决于递归调用的深度,即递归栈的大小。在最坏的情况下,如果二叉树是一个单链的斜树,递归栈的深度将是n,因此空间复杂度为O(n)。在平均情况下,递归栈的深度取决于二叉树的平衡性,通常为O(log n)。

总结起来,这段代码的时间复杂度为O(n),空间复杂度为O(n)或O(log n),取决于二叉树的形状。

你可能感兴趣的:(#,6.二叉树,算法)