代码之家  ›  专栏  ›  技术社区  ›  Juan

Javascript-按顺序遍历二叉树。最后一个值打印未定义

  •  1
  • Juan  · 技术社区  · 6 年前

    我打印出一个二叉树中的所有节点,以便正确打印节点。但它也在列表的末尾打印了一个未定义的,我找不到原因。我正在为一个编程比赛而学习,正如你已经知道的,获得完美的输出是很重要的。它只是一个控制台的东西吗?我在VS代码内置控制台和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
    

    有什么理由让我最后一次没有定义?.谢谢

    1 回复  |  直到 6 年前
        1
  •  2
  •   Mark    6 年前

    你不需要记录 depthFirstTraversal 因为它不返回任何东西(或者更确切地说,它返回 undefined ). 为了避免记录 未定义 价值只是变化:

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

    bst.depthFirstTraversal(print);