Вопрос простого бинарного дерева - PullRequest
1 голос
/ 23 февраля 2011

Я хотел отобразить все узлы на определенном уровне в дереве:

Вызывается по: 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 ]

6 голосов
/ 23 февраля 2011

Второй пример увеличивает 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);
2 голосов
/ 23 февраля 2011

Ваша проблема в том, что вы делаете счетчик ++ для раз, поэтому вы увеличиваете счетчик уровня еще на один раз.

Вы должны изменить свой код на следующее:

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