Java 我的代码怎么了&引用;使用递归计算二叉树的叶子;
我无法理解为什么我的计数器无法存储正确的值 当我将计数器作为一个通用变量时,此代码可以工作,但是 如果我在函数中传递“count”,它将不起作用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
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);”,解决了这个问题。