2015-11-04 4 views
1

Я хочу проверить, вырождено ли дерево двоичного поиска или нет (это связанный список или действительно дерево?) Я пытался какое-то время и придумал ничто не работает. Я придумал нерекурсивное решение, которое, как я думал, было довольно умным, но спецификации указывают, что оно должно быть рекурсивным решением, и я переводил его из нерекурсивного в рекурсивный.Проверка, является ли дерево двоичного поиска вырожденным

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

public boolean isDegenerate(){ 
     if(this.size() == this.getHeight()){ 
      return true; 
     } 
     return false; 
    } 
+0

Это похоже на хорошую проблему с домашним заданием, поэтому я бы предпочел не отвечать на вопросы в Интернете, погубив хороший вопрос для потомков. Но вы думали о том, чтобы просто подсчитать количество детей каждого узла рекурсивно? Что вы знаете о дереве, основанном на подсчете дочерних элементов текущего узла? –

ответ

3

Ну, если вы хотите «более рекурсивное» решение, как насчет этого?

public boolean isDegenerate() { 
    if (this.left != null) { 
     if (this.right != null) { 
      return false; // not degenerate, has two children 
     } else { 
      return this.left.isDegenerate(); 
     } 
    } else { 
     if (this.right != null) { 
      return this.right.isDegenerate(); 
     } else { 
      return true; // we arrived at the bottom without seeing any node with two children 
     } 
    } 
} 
+0

Это бросает мне нулевой указатель. Я не думаю, что в случае, когда этот == null позаботится. –

+0

'this' никогда не может быть пустым. Возможно, вам нужно позаботиться о случае, когда нет узлов дерева вообще (даже не root). –

Смежные вопросы