Javascript - Двоичный обход дерева в порядке. Последнее значение печати не определено

1

Я распечатываю все узлы в двоичном дереве, чтобы правильно печатать узлы. Но он также печатает неопределенные в конце списка, и я не могу найти причину. Я участвую в конкурсе на программирование, и, как вы уже знаете, важно получить идеальный результат. Это просто консольная штука? Я попробовал это как в VS Code, встроенном в консоль, так и в терминал ubuntu. Код:

function BST(value) {
    this.value = value;
    this.left = null;
    this.right = null;
}

BST.prototype.insert = function(value) {

    if( value <= this.value ){
        if(this.left){
          //left busy
          this.left.insert(value);
        }else{
          //left is free
          this.left = new BST(value);
        }
    }else{
        if(this.right){
            //right busy
            this.right.insert(value);
        }else{
            //right is free
            this.right = new BST(value);
        }
    } 

}

BST.prototype.contains = function(value){

    if(this.value === value){
        return true;
    }

      if(value < this.value){
        if(this.left){ 
          return this.left.contains(value);
        }else{
          return false;  
        }
       } else if(value > this.value){
         if(this.right){  
          return this.right.contains(value);
         }else{
          return false;   
         }
       } 


}



BST.prototype.depthFirstTraversal = function(iteratorFunc){


    if(this.left){
        this.left.depthFirstTraversal(iteratorFunc);
      }

   if(this.value){
    iteratorFunc(this.value);
   }


   if(this.right){
    this.right.depthFirstTraversal(iteratorFunc);
   }


}

var bst = new BST(50);

bst.insert(30);
bst.insert(70);
bst.insert(100);
bst.insert(60);
bst.insert(59);
bst.insert(20);
bst.insert(45);
bst.insert(35);
bst.insert(85);
bst.insert(105);
bst.insert(10);

console.log(bst.depthFirstTraversal(print));

function print(val){
    console.log(val);
 }

Распечатываемый список:

10
20
30
35
45
50
59
60
70
85
100
105
undefined

Любая причина, по которой я получаю этот последний неопределенный?. Спасибо

  • 0
    В вашем коде также есть ошибка, из-за которой ваше дерево не может найти 0. if (this.value)
  • 0
    Я уже удалил эту часть, так как она была не нужна, и реорганизовал ее для поддержки предварительного заказа, заказа и пост-заказа. Спасибо, что сообщили мне об ошибке!
Теги:
algorithm
binary-tree

1 ответ

2
Лучший ответ

Вам не нужно регистрировать результат depthFirstTraversal потому что он ничего не возвращает (вернее, он возвращает undefined). Чтобы избежать регистрации, это undefined значение просто изменится:

console.log(bst.depthFirstTraversal(print));

в

bst.depthFirstTraversal(print);
  • 0
    Мне стыдно сказать, что я этого не заметил. Возможно, вы могли бы понять, почему это происходит, для будущих читателей.
  • 1
    Лол. Я не могу поверить, что я пропустил это. Я кодирую 12 часов, время идти спать, ха-ха. Приму ваш ответ через пару минут. Спасибо
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню