JS在树形结构中查找对象、树形结构展平成数组
时间: 2024-03-12 21:49:50 浏览: 117
对于树形结构中查找对象,可以使用递归遍历方式来实现。具体思路如下:
1. 从根节点开始遍历树形结构。
2. 每次遍历到一个节点,判断是否是目标对象。如果是,则返回该节点;如果不是,则继续遍历该节点的子节点。
3. 如果在当前节点的子节点中没有找到目标对象,则遍历当前节点的兄弟节点,直到遍历完整个树形结构。
下面是一个示例代码:
```javascript
function findNode(node, target) {
if (node === target) {
return node;
}
let result = null;
if (node.children) {
for (let i = 0; i < node.children.length; i++) {
result = findNode(node.children[i], target);
if (result) {
break;
}
}
}
return result;
}
```
对于树形结构展平成数组,可以使用递归遍历方式或者广度优先遍历方式来实现。具体思路如下:
1. 对于递归遍历方式,从根节点开始遍历树形结构。
2. 每次遍历到一个节点,将该节点的值添加到数组中,然后递归遍历该节点的子节点。
3. 如果在当前节点的子节点中没有找到目标对象,则遍历当前节点的兄弟节点,直到遍历完整个树形结构。
下面是一个示例代码:
```javascript
function flattenTree(node) {
let result = [node];
if (node.children) {
for (let i = 0; i < node.children.length; i++) {
result = result.concat(flattenTree(node.children[i]));
}
}
return result;
}
```
对于广度优先遍历方式,使用队列来实现。具体思路如下:
1. 将根节点添加到队列中。
2. 从队列中取出一个节点,将该节点的值添加到数组中,并将该节点的子节点依次添加到队列的末尾。
3. 重复步骤2,直到队列为空。
下面是一个示例代码:
```javascript
function flattenTree(node) {
let result = [];
let queue = [node];
while (queue.length > 0) {
let cur = queue.shift();
result.push(cur);
if (cur.children) {
queue = queue.concat(cur.children);
}
}
return result;
}
```
阅读全文