Aquí está mi código para crear el árbol de búsqueda binaria, así como un método prototipo para agregar al árbol. También existe el método de pedido anticipado junto con algunas llamadas para ejecutar las funciones para probarlas...
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 ]*Sigo recibiendo "la devolución de llamada no es una función" cuando intento ejecutar la función depthFirstPre y no sé por qué.
¡Gracias por cualquier ayuda, será muy apreciada!
Puede agregar una marca y tomar this.left o this.right para la llamada.
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());