终止递归
1. 实现目标:js 编写递归方法 查找指定节点;
2. 需解决问题:找到所需节点后,递归不会终止,直到所有节点遍历完成后才会停止,会消耗性能
3. 解决方案:优化递归方法,在找到所需节点后,直接终止递归
4. 代码:
function TreeNode(value, children = []) {
this.value = value;
this.children = children;
}
const root = new TreeNode(1, [
new TreeNode(2, [new TreeNode(4), new TreeNode(5)]),
new TreeNode(3, [
new TreeNode(6),
new TreeNode(7, [new TreeNode(8), new TreeNode(9)]),
]),
]);
let result = null;
function traverseTreeErr(findVal, node = root) {
console.log("traverseTreeErr", node);
if (node.value === findVal) {
result = node;
return;
}
for (let child of node.children) {
traverseTreeErr(findVal, child);
}
}
traverseTreeErr(6);
console.log("traverseTreeErr.result", result);
function traverseTree(findVal, node = root) {
console.log("traverseTree", node);
if (node.value === findVal) {
return node;
}
for (let child of node.children) {
let result = traverseTree(findVal, child);
if (result) {
return result;
}
}
return null;
}
console.log("traverseTree.result", traverseTree(6));
5. 效果图: