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());