Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的代码怎么了&引用;使用递归计算二叉树的叶子;_Java_Recursion_Treenode - Fatal编程技术网

Java 我的代码怎么了&引用;使用递归计算二叉树的叶子;

Java 我的代码怎么了&引用;使用递归计算二叉树的叶子;,java,recursion,treenode,Java,Recursion,Treenode,我无法理解为什么我的计数器无法存储正确的值 当我将计数器作为一个通用变量时,此代码可以工作,但是 如果我在函数中传递“count”,它将不起作用 public int numberOfLeaves(TreeNode root) { if(root==null) return 0; return leaves(root,0); } public int leaves(TreeNode TN,int count){ if(TN.left==null

我无法理解为什么我的计数器无法存储正确的值

当我将计数器作为一个通用变量时,此代码可以工作,但是 如果我在函数中传递“count”,它将不起作用

public int numberOfLeaves(TreeNode root) {   
    if(root==null)
       return 0;

    return leaves(root,0);
}



public int leaves(TreeNode TN,int count){ 

  if(TN.left==null && TN.right==null) {     
       count++;     
  }

  if(TN.left!=null){
       leaves(TN.left,count); 
  }

  if(TN.right!=null){
      leaves(TN.right,count);   
  }    

return count;

}

您甚至不需要传递count变量。递归对您有用

只需添加左子树的叶数+右子树的叶数:

public int leaves(TreeNode TN){
如果(TN==null)
返回0;
如果(TN.left==null&&TN.right==null)
返回1;
回程叶片(左)+叶片(右);
}

您不保存方法调用的返回值<代码>计数+=叶数(TN.left,计数)记住,在java中,变量是@jhamon我同意它们是通过值传递的,但我传递的是函数调用中最新的值。是的,你传递了值,然后呢?在方法中更改它,返回它,然后。。。放下它。在被调用方方法中更改的int值在调用方方法中不会更新OK,我明白你的意思。非常感谢。我将调用更新为“count=leaves(TN.left,count);”,解决了这个问题。