简单的二叉树问题

时间:2011-02-23 02:26:08

标签: java binary-tree

我想要在树中的某个级别显示所有节点:

被称为:allNodesAtACertainLevel(0, *whatever level you want*, root);

这会产生正确答案。

private void allNodesAtACertainLevel(int count, int level, Node n){

        count += 1;

        if(count <= level){
            if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
            if(n.right != null) allNodesAtACertainLevel(count, level, n.right);
        }
        else{
            System.out.print(n.value);
        }

    }

这不是。

private void allNodesAtACertainLevel(int count, int level, Node n){

        if(count < level){
            if(n.left != null) allNodesAtACertainLevel(count++, level, n.left);
            if(n.right != null) allNodesAtACertainLevel(count++, level, n.right);
        }
        else{
            System.out.print(n.value);
        }

    }

有人可以解释原因吗?

2 个答案:

答案 0 :(得分:6)

第二个示例增加count两次,第一个示例仅增加count一次。在调用count之前,第一个增量为allNodesAtACertainLevel,第二个示例调用allNodesAtACertainLevel时增加count,并在调用之后增加count++; if(n.left != null) allNodesAtACertainLevel(count, level, n.left); if(n.right != null) allNodesAtACertainLevel(count, level, n.right);

如果适当替换第二个例子,其中任何一个都应产生正确的结果:

count += 1;
if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count, level, n.right);

-

if(n.left != null) allNodesAtACertainLevel(count+1, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count+1, level, n.right);

-

{{1}}

答案 1 :(得分:2)

你的问题是因为你正在计算++次数,所以你再增加一次水平计数器。

您应该将代码更改为以下内容:

count++;
if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count, level, n.right);