简单的二叉树问题

Rya*_*yan 1 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);
        }

    }
Run Code Online (Sandbox Code Playgroud)

事实并非如此.

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

    }
Run Code Online (Sandbox Code Playgroud)

有人能解释为什么吗?

Mar*_*iot 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);
Run Code Online (Sandbox Code Playgroud)

-

count += 1;
if(n.left != null) allNodesAtACertainLevel(count, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count, level, n.right);
Run Code Online (Sandbox Code Playgroud)

-

if(n.left != null) allNodesAtACertainLevel(count+1, level, n.left);
if(n.right != null) allNodesAtACertainLevel(count+1, level, n.right);
Run Code Online (Sandbox Code Playgroud)

  • @Ryan:它在变量范围内递增,而不是在调用中.我添加了一些相同的版本,最后一个可能是你真正想要的. (2认同)