计算 Java 中二叉树中的节点数
Count number of nodes in binary tree in Java
static int sum=0;
public static int size(TreeNode root){
if(root==null)
return sum;
sum++;
sum=size(root.left);
sum=size(root.right);
return sum;
}
我们只需要完成计算二叉树节点数的函数"size"。我已经写了上面的代码。它对某些测试用例给出了错误的答案。请解释上面的代码有什么问题。
从子节点获取数据时sum
设置不正确
sum += size(root.left);
sum += size(root.right);
我建议你在递归时不要使用全局静态变量来获取值
static int sum=0;
public static int size(TreeNode root){
if(root==null)
return 0;
int cnt = 0;
cnt++;
cnt += size(root.left);
cnt += size(root.right);
return cnt;
}
这里:
sum=size(root.left);
sum=size(root.right);
您正在计算 两个 个总和,然后丢弃第一个!
您可以改为:return size(root.left)+size(root.right) + 1
。
这里也没有必要使用静态字段 sum
。如果有的话,那应该是该递归方法中的 local 变量!分别:简单地 return 0
为 null,否则使用我在此处提供的 return。首先 不需要 那个 sum
变量!
尝试这样的事情:
public static int size(final TreeNode node)
{
if (null == node ) return 0;
return 1 + size( node.left ) + size( node.right );
}
static int sum=0;
public static int size(TreeNode root){
if(root==null)
return sum;
sum++;
sum=size(root.left);
sum=size(root.right);
return sum;
}
我们只需要完成计算二叉树节点数的函数"size"。我已经写了上面的代码。它对某些测试用例给出了错误的答案。请解释上面的代码有什么问题。
从子节点获取数据时sum
设置不正确
sum += size(root.left);
sum += size(root.right);
我建议你在递归时不要使用全局静态变量来获取值
static int sum=0;
public static int size(TreeNode root){
if(root==null)
return 0;
int cnt = 0;
cnt++;
cnt += size(root.left);
cnt += size(root.right);
return cnt;
}
这里:
sum=size(root.left);
sum=size(root.right);
您正在计算 两个 个总和,然后丢弃第一个!
您可以改为:return size(root.left)+size(root.right) + 1
。
这里也没有必要使用静态字段 sum
。如果有的话,那应该是该递归方法中的 local 变量!分别:简单地 return 0
为 null,否则使用我在此处提供的 return。首先 不需要 那个 sum
变量!
尝试这样的事情:
public static int size(final TreeNode node)
{
if (null == node ) return 0;
return 1 + size( node.left ) + size( node.right );
}