JavaScript中如何在BST的traverseInOrder方法内提前退出函数?
解决方案
你当前的写法无法终止遍历的原因是:@datastructures-js/binary-search-tree 封装的traverseInOrder方法没有对回调的返回值做判断,回调内执行return只会结束当前单次回调的执行,不会停止后续节点的遍历调用,你可以用以下两种方案实现提前终止:
方案1:主动抛异常中断遍历
这是兼容现有traverseInOrder调用的最简单实现,注意区分中断异常和其他业务异常,避免吞掉正常报错:
let targetNode = null; try { bst.traverseInOrder((node) => { if (/* 你的终止判断条件 */) { targetNode = node; // 抛出自定义标识的异常中断遍历 throw new Error('BST_TRAVERSE_BREAK'); } // 正常处理节点的业务逻辑 }); } catch (err) { // 非中断类的异常需要重新抛出 if (err.message !== 'BST_TRAVERSE_BREAK') { throw err; } }
方案2:使用内置迭代器手动控制遍历(更推荐)
该BST包自带中序遍历迭代器接口,你可以自主控制遍历流程,无需抛异常,性能和可读性都更好:
// 获取中序遍历迭代器 const inOrderIter = bst.inOrder(); let current = inOrderIter.next(); while (!current.done) { const node = current.value; if (/* 你的终止判断条件 */) { break; // 直接终止遍历 } // 正常处理节点的业务逻辑 current = inOrderIter.next(); }
内容的提问来源于stack exchange,提问作者user490905
相关产品推荐
相关产品推荐

