计算Java中二叉树中的节点数

时间:2018-12-04 10:23:04

标签: java recursion binary-tree

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”即可计算二进制树中节点的数量。我已经写了上面的代码。对于某些测试用例,它给出了错误的答案。请解释上面代码中的错误。

3 个答案:

答案 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 );
}