gpt4 book ai didi

javascript - javascript中树的广度优先遍历

转载 作者:行者123 更新时间:2023-12-02 23:24:01 25 4
gpt4 key购买 nike

我试图很好地学习数据结构,并实现了以下代码,以在常规树上进行深度优先遍历/应用回调:

Tree.prototype.traverse = function (callback) {
callback(this.value);

if (!this.children) {
return;
}
for (var i = 0; i < this.children.length; i++) {
var child = this.children[i];
child.traverse(callback);
}
};

我该如何改变它以使其广度优先?这就是树类的样子:

var Tree = function (value) {
var newTree = {};

newTree.value = value;
newTree.children = [];
extend(newTree, treeMethods);

return newTree;
};

最佳答案

从根本上来说,DFS 和 BFS 之间的区别在于,使用 DFS 时,您将当前节点的子节点推送到堆栈中,因此它们将在其他所有操作之前弹出并处理,而对于 BFS 来说,您可以将子级推到队列末尾,这样它们就会在其他所有事情之后被弹出并进行处理。

DFS很容易递归实现,因为你可以使用调用堆栈作为堆栈。你不能用 BFS 做到这一点,因为你需要一个队列。为了清楚地表明相似性,我们首先将 DFS 转换为迭代实现:

//DFS
Tree.prototype.traverse = function (callback) {
var stack=[this];
var n;

while(stack.length>0) {

n = stack.pop();
callback(n.value);

if (!n.children) {
continue;
}

for (var i = n.children.length-1; i>=0; i--) {
stack.push(n.children[i]);
}
}
};

现在是 BFS

//BFS
Tree.prototype.traverse = function (callback) {
var queue=[this];
var n;

while(queue.length>0) {

n = queue.shift();
callback(n.value);

if (!n.children) {
continue;
}

for (var i = 0; i< n.children.length; i++) {
queue.push(n.children[i]);
}
}
};

关于javascript - javascript中树的广度优先遍历,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33703019/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com