解题思路
步骤
深度优先遍历(利用栈实现)
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));
