最近chatGPT热度不减,今天抽空体验了一下(国内镜像版本),看看chatGPT写的算法怎么样。
嗯...答案很快出来了,结果见下图
深度优先遍历
深度优先其实就是先遍历子节点,然后再遍历兄弟节点,可以利用递归实现。
假设数据结构如下:
var nodes = {
value: 'A',
children: [
{
value: 'B',
children: [
{
value: 'C',
},
{
value: 'D'
}
]
}, {
value: 'E'
}
],
}
以上对象形如一个二叉树
深度优先遍历的顺序就是:A-B-C-D-E
function depthFirstSearch(node) {
if (node == null) {
return;
}
console.log(node.value);
let children = node.children || [];
// 如果node节点存在childre,那么继续往下遍历
children.forEach((child) => {
depthFirstSearch(child);
});
}
depthFirstSearch(nodes);
// log: A B C D E
广度优先遍历
广度优先遍历的顺序是:A-B-E-C-D
先遍历兄弟节点,再遍历子节点。可以利用数组队列将当前节点的children展开后,添加到数组最后,等到兄弟节点遍历完成,再遍历子节点
function breadthFirstSearch(nodes) {
if (!nodes) return;
let queue = [nodes];
while (queue.length) {
let item = queue.shift();
console.log(item.value);
let children = item.children || [];
for (const child of children) {
queue.push(child);
}
}
}
breadthFirstSearch(nodes);
// log: A B E C D
如果把queue队列里打印出来,依次是:
[ { value: 'A', children: [ [Object], [Object] ] } ]
[ { value: 'B', children: [ [Object], [Object] ] }, { value: 'E' } ]
[ { value: 'E' }, { value: 'C' }, { value: 'D' } ]
[ { value: 'C' }, { value: 'D' } ]
[ { value: 'D' } ]