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”即可计算二进制树中节点的数量。我已经写了上面的代码。对于某些测试用例,它给出了错误的答案。请解释上面代码中的错误。
答案 0 :(得分:5)
这里:
sum=size(root.left);
sum=size(root.right);
您正在计算两个和,然后丢弃第一个!
您可以去:return size(root.left)+size(root.right) + 1
。
在这里使用静态字段 sum
也没有意义。如果有的话,那应该是该递归方法中的 local 变量!分别:简单地将return 0
设置为null,否则使用我在此处提供的返回值。首先,该变量sum
不需要 !
答案 1 :(得分:1)
从子节点获取数据时,您没有正确设置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;
}
答案 2 :(得分:0)
尝试这样的事情:
public static int size(final TreeNode node)
{
if (null == node ) return 0;
return 1 + size( node.left ) + size( node.right );
}