将递归方法转换为循环方法


async function treeTraverser(userId) {
if (userId !== null) {
const user = await User.findById(userId).select("-password");
graphUsers.push(user);
treeTraverser(user.directions.left);
treeTraverser(user.directions.right);
}
}

我想将此函数转换为循环函数。

user.directions

是一个包含其他用户 ID 的对象

user.directions: {
left: someId,
right: someId
}

我将感谢令人惊叹的开发人员社区。

async function treeTraverser(userId) {
if (userId !== null) {
const user = await User.findById(userId).select("-password");
graphUsers.push(user);
}
}

Object.keys(user.directions).forEach((key) => {
treeTraverser(user.direction[key])
})
async function iterativePreOrderTraverser(userId) {
if (userId === null) return;
const nodeStack = [];
nodeStack.push(userId);
while (nodeStack.length > 0) {
let poppedUserId = nodeStack.pop();
const user = await User.findById(poppedUserId);
graphUsers.push(user);
if (user.directions.right !== null) {
nodeStack.push(user.directions.right);
}
if (user.directions.left !== null) {
nodeStack.push(user.directions.left);
}
}

基本上我的问题包含一个预购树遍历代码。所以我在互联网上搜索并在Geek For Geeks上找到了一个解决方案,它通过循环解决了这个问题。它不包含javascript代码,但我可以将python代码转换为javascript代码。

相关内容

  • 没有找到相关文章

最新更新