Java 为什么不能在maxPath()中写入私有int d,而是在diameterOfBinaryTree()之前写入 类解决方案{ 私人int d; 二元树(树根)的公共内径{ d=0; 最大路径(根); 返回d; } 专用int maxPath(TreeNode节点){ 如果(node==null){返回0;} int leftDepth=maxPath(node.left); int rightDepth=maxPath(node.right); //d=数学最大值(d,leftDepth+rightDepth); 如果(d局部

Java 为什么不能在maxPath()中写入私有int d,而是在diameterOfBinaryTree()之前写入 类解决方案{ 私人int d; 二元树(树根)的公共内径{ d=0; 最大路径(根); 返回d; } 专用int maxPath(TreeNode节点){ 如果(node==null){返回0;} int leftDepth=maxPath(node.left); int rightDepth=maxPath(node.right); //d=数学最大值(d,leftDepth+rightDepth); 如果(d局部,java,Java,在第二行,为什么“private int d”必须写在biarytree()的直径之前????我可以将其设置为public吗?private,public和protected修饰符适用于成员,而不是局部变量(在定义它们的范围之外无法访问) 如果您希望从其他类而不仅仅是从解决方案的方法内部访问d公共,则可以将其设置为公共。1),因为私有只能用于字段。将访问修饰符(private、public、protected)放在>局部

在第二行,为什么“private int d”必须写在biarytree()的直径之前????我可以将其设置为public吗?

private
public
protected
修饰符适用于成员,而不是局部变量(在定义它们的范围之外无法访问)


如果您希望从其他类而不仅仅是从解决方案的方法内部访问
d
公共
,则可以将其设置为公共。

1),因为
私有
只能用于字段。将访问修饰符(
private
public
protected
)放在>局部<变量上是没有意义的,因为局部变量无论如何都不能在方法之外访问。它们不在方法之外的任何代码的范围内。2) 您可以将字段top设置为
公共
,但这是不可取的……通常问问自己:这个实例变量需要公共吗?如果答案不是肯定的“是!”,那么它可能应该是私有的。
d
需要是一个实例变量,因为您在两个方法之间共享它。您可以重写代码,将值作为参数传递,并将新值作为返回值接收。
class Solution {
    private int d;
    public int diameterOfBinaryTree(TreeNode root) {
        d = 0;
        maxPath(root);
        return d ;
    }
    private int maxPath (TreeNode node){
        
        if (node == null) {return 0;}
        int leftDepth = maxPath(node.left);
        int rightDepth= maxPath(node.right);
       // d = Math.max(d,leftDepth + rightDepth );

        if (d < leftDepth + rightDepth) {d = leftDepth + rightDepth;}
        
        return Math.max(leftDepth, rightDepth) +1;     
        
    }
}