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代码。