📅  最后修改于: 2023-12-03 15:16:17.437000             🧑  作者: Mango
树是一种非线性结构,由节点和边组成。在 JavaScript 中,树可以使用对象进行表示。树遍历是指按照某种顺序访问树中的每一个节点,树遍历递归是一种常见的实现方式。
深度优先遍历是一种先访问子节点再访问兄弟节点的遍历方式。深度优先遍历可以使用递归实现。
// 深度优先遍历
function dfs(node) {
console.log(node.value);
if (node.children) {
node.children.forEach((child) => dfs(child));
}
}
以上代码定义了一个 dfs
函数,参数为根节点。函数首先输出当前节点的值,然后递归调用每个子节点的 dfs
函数。这样就可以完成深度优先遍历。
广度优先遍历是先访问同一层级节点,再访问下一层节点的遍历方式。广度优先遍历可以使用队列实现。
// 广度优先遍历
function bfs(node) {
const queue = [node];
while (queue.length) {
const cur = queue.shift();
console.log(cur.value);
if (cur.children) {
cur.children.forEach((child) => queue.push(child));
}
}
}
以上代码定义了一个 bfs
函数,参数为根节点。函数使用队列存储每一层级的节点,首先弹出队首节点,然后输出该节点的值,最后将子节点入队。这样就可以完成广度优先遍历。
树遍历是一种常见的算法问题,深度优先遍历和广度优先遍历是两种基本的遍历方式。递归是实现深度优先遍历的常见方式,队列是实现广度优先遍历的常见方式。