Matriz utilizada para hacer el BST (que mi función toma como entrada): [38,95,70,5,10,148,93]
A partir de ahora, la función solo devuelve [5,10] , en lugar de devolver todos los elementos ordenados. ¿Qué tiene de malo este enfoque?
function sortedArrayFromBST(tree,node,outputArray){ outputArray=outputArray||[] // console.log(tree) node=node||tree.root console.log(node) let left=node.left console.log(left) let right=node.right console.log(right) if(left ==null){ outputArray.push(node.data) }else{ return sortedArrayFromBST(tree,left, outputArray) } if(right==null){ return outputArray } else{ return sortedArrayFromBST(tree, right, outputArray) } }En el corazón de su función recursiva, desea hacer algo como lo siguiente:
if (node === null) // base case return if (node.left !== null) sortedArrayFromBST(node.left, outputArray) outputArray.push(node.val) if (node.right !== null) sortedArrayFromBST(node.right, outputArray) return outputArrayTus condiciones ahora mismo no son las correctas.
Las condiciones de return que estás usando son incorrectas. En lugar de regresar desde el nodo left , debe agregar sus valores a la salida y luego procesar el nodo right .
function sortedArrayFromBST(tree, node) { if (node == null) { return [] } outputArray = [] let left = node.left let right = node.right outputArray.push(sortedArrayFromBST(tree, left)) outputArray.push(node.data) outputArray.push(sortedArrayFromBST(tree, right)) return outputArray }