开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详情
引言
算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。
题目描述
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入: root = [3,9,20,null,null,15,7]
输出: [[3],[9,20],[15,7]]
示例 2:
输入: root = [1]
输出: [[1]]
示例 3:
输入: root = []
输出: []
分析
根据题目的分析,我们如何轻松的解决二叉树层序遍历问题?十分简单,直接使用队列的数据结构就可以完成层序遍历了。
- 初始化一个空队列,将根节点添加到队列
- 循环结束的条件是队列空
- 每次都将当前的队列的一层全部的取出来保存,然后判断每个节点的孩子是否存在,如果存在则添加队列中
- 返回最后的结果
解答
var levelOrder = function(root) {
let que = []
let res = []
if(!root) return res
que.push(root)
while(que.length) {
let len = que.length
let tmp = []
for(let i=0;i<len;i++) {
let node = que.shift()
tmp.push(node.val)
if(node.left) que.push(node.left)
if(node.right) que.push(node.right)
}
res.push(tmp)
}
return res
};
整体的设计是基于队列完成的,直接在循环的时候不断地进行出队列和入队列地操作完成实践过程。
总结
通过对二叉树层序遍历的讲解,大家学到了进行问题的解决。通过队列数据结构巧妙计算可以优雅的在低时间和空间复杂度下完成任务。