给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例: 二叉树:[3,9,20,null,null,15,7],
3/ \9 20/ \15 7
返回其层次遍历结果:
[[3],[9,20],[15,7]]
思路
BFS+队列实现,在对二叉树进行层序遍历时,每一次 while 循环其实都对应着二叉树的某一层。只要我们在进入while循环之初,记录下这一层结点个数,然后将这个数量范围内的元素 push 进同一个数组,就能够实现二叉树的分层。
/*** @param {TreeNode} root* @return {number[][]}*/const levelOrder = function(root) {// 初始化结果数组const res = []// 处理边界条件if(!root) {return res}// 初始化队列const queue = []// 队列第一个元素是根结点queue.push(root)// 当队列不为空时,反复执行以下逻辑while(queue.length) {// level 用来存储当前层的结点const level = []// 缓存刚进入循环时的队列长度,这一步很关键,因为队列长度后面会发生改变const len = queue.length// 循环遍历当前层级的结点for(let i=0;i<len;i++) {// 取出队列的头部元素const top = queue.shift()// 将头部元素的值推入 level 数组level.push(top.val)// 如果当前结点有左孩子,则推入下一层级if(top.left) {queue.push(top.left)}// 如果当前结点有右孩子,则推入下一层级if(top.right) {queue.push(top.right)}}// 将 level 推入结果数组res.push(level)}// 返回结果数组return res};
