Home > Mobile >  I am trying to do a run a callback function on an array input into a binary search tree.. I keep get
I am trying to do a run a callback function on an array input into a binary search tree.. I keep get

Time:12-17

Here is my code to create the binary search tree as well as a prototype method to add to the tree. There is also the preorder method along with some calls to execute the functions to test them...

function BinarySearchTree(value) {
    this.value = value;
    this.right = null;
    this.left = null;
  }
  
  BinarySearchTree.prototype.add = function(value) {
    if (value < this.value && this.left) {
      this.left.add(value);
    } else if (value < this.value) {
      this.left = new BinarySearchTree(value);
    }
  
    if (value > this.value && this.right) {
      this.right.add(value);
    } else if (value > this.value) {
      this.right = new BinarySearchTree(value);
    }
  
  };

 BinarySearchTree.prototype.depthFirstPre = function(callback) {
    callback(this.value);
    this.depthFirstPre(this.left);
    this.depthFirstPre(this.right);
  };

binarySearchTree = new BinarySearchTree(5);
var array = [];
var func = function(value){ array.push(value); };
binarySearchTree.add(2);
binarySearchTree.add(3);
binarySearchTree.add(7);
binarySearchTree.add(6);
binarySearchTree.depthFirstPre(func);
console.log(array) -> *should output [ 5, 2, 3, 7, 6 ]*

I keep getting "callback is not a function" when I try and execute the depthFirstPre function and I am confused as to why.

Thanks for any help, it will be greatly appreciated!

CodePudding user response:

You could add a check and take this.left or this.right for the call.

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

BinarySearchTree.prototype.add = function(value) {
    if (value < this.value) {
        if (this.left) this.left.add(value);
        else this.left = new BinarySearchTree(value);
    }

    if (value > this.value) {
        if (this.right) this.right.add(value);
        else this.right = new BinarySearchTree(value);
    }
};

BinarySearchTree.prototype.depthFirstPre = function(callback) {
    callback(this.value);
    if (this.left) this.left.depthFirstPre(callback);
    if (this.right) this.right.depthFirstPre(callback);
};

BinarySearchTree.prototype.depthFirst = function() {
    return [
        this.value,
        ...(this.left ? this.left.depthFirst() : []),
        ...(this.right ? this.right.depthFirst() : [])
    ];
};

var binarySearchTree = new BinarySearchTree(5),
    array = [],
    func = function(value) { array.push(value); };

binarySearchTree.add(2);
binarySearchTree.add(3);
binarySearchTree.add(7);
binarySearchTree.add(6);
binarySearchTree.depthFirstPre(func);

console.log(...array); // [ 5, 2, 3, 7, 6 ]

console.log(...binarySearchTree.depthFirst());

  • Related