前言
掘金团队号上线,助你 Offer 临门! 点击 查看详情
题目描述
解题思路
- 这道题属于二叉树的层次遍历问题
- 首先定义三个数组
- 数组queue用来存放当前层的所有元素指针
- 数组temp充当临时数组,用来存放当前元素所有指针的左右孩子指针
- 数组test用来存放每一层元素的值
- 当test存储完一层的元素后,就将queue置为空,然后遍历temp将每个元素的左右孩子节点继续放入queue,继续下次循环
解题代码
var levelOrder = function (root) { // 使用队列的方式进行二叉树的层次遍历 if (root === null) return []; let queue = []; const result = []; queue.push(root); while (queue.length !== 0) { const temp = []; const test = []; for (let v of queue) { temp.push(v); test.push(v.val); } result.push(test); queue = []; for (let v of temp) { if (v.left !== null) { queue.push(v.left) } if (v.right !== null) { queue.push(v.right) } } } for (let i = 0; i < result.length;i++) { if (i % 2 !== 0) { result[i] = result[i].reverse() } } return result; };
总结
- 本题乍一看不难,大家也都容易想到一定的思路,但是难就难层次的遍历上
- 本题可以采用一个数组来记录当前层,另一个数组来记录当前层的所有子节点,然后将当前层清空,使用所有子节点的层继续遍历。