解题思路
步骤
深度优先遍历(利用栈实现)
1. 将数组元素,深度默认为 0 入栈
2. 出栈时计算深度,出栈一次,深度 + 1。出栈元素是数组,依次入栈,继续计算深度;出栈元素不是数组,计算最大深度
注意点:
- deep 在深度遍历的过程中被贯穿起来
- 某个变量想被贯穿起来的时候,可以一起入栈
图解
代码
数组:[1, [2, [7, [4, [5]]], 6], 9]
最大深度:5
/**
* 解题思路:深度优先遍历(利用栈实现)
* 1. 将数组元素,深度默认为 0 入栈
* 2. 出栈时计算深度,出栈一次,深度 + 1。出栈元素是数组,依次入栈,继续计算深度;出栈元素不是数组,计算最大深度
*/
function getArrayDeep(arr) {
let maxDeep = 0;
const stack = [];
// 依次遍历数组元素
for (let i = 0; i < arr.length; i++) {
// 初始值入栈
stack.push([arr[i], 0]);
// 判断栈不为空
while(stack.length > 0) {
// 出栈
let [current, deep] = stack.shift();
// 计算深度,deep 会贯穿嵌套的数组,直到数组元素不是数组类型
deep++;
// 当前元素是数组,将数组元素依次入栈
if (Array.isArray(current)) {
for (let j = 0; j < current.length; j++) {
stack.push([current[j], deep]);
}
} else { // 当前元素不是数组,计算最大深度
maxDeep = Math.max(maxDeep, deep);
}
}
}
return maxDeep;
}
const arr = [1, [2, [7, [4, [5]]], 6], 9];
console.log(getArrayDeep(arr));