102.二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。
学习链接
个人想法
之前学的都是深度优先遍历,这次需要的是广度优先遍历,解题思路就是用一个队列模拟层序遍历,一层层输出
解题代码
/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } */ /** * @param {TreeNode} root * @return {number[][]} */ var levelOrder = function(root) { const queue = [] // 初始化队列queue // 根结点首先入队 const res = [] queue.push(root) if(!root){ return res; } // 队列不为空,说明没有遍历完全 while(queue.length) { let len = queue.length let cur = [] while(len){ const top = queue.shift() cur.push(top.val) // 访问完毕,队头元素出队 // 如果左子树存在,左子树入队 top.left&&queue.push(top.left) // 如果右子树存在,右子树入队 top.right&& queue.push(top.right) len-- } res.push(cur) } return res };
相关题目
107. 二叉树的层序遍历 II
既然是反向,就直接返回res.reverse()
var levelOrderBottom = function(root) { const queue = [] // 初始化队列queue // 根结点首先入队 const res = [] queue.push(root) if(!root){ return res; } // 队列不为空,说明没有遍历完全 while(queue.length) { let len = queue.length let cur = [] while(len){ const top = queue.shift() cur.push(top.val) // 访问完毕,队头元素出队 // 如果左子树存在,左子树入队 top.left&&queue.push(top.left) // 如果右子树存在,右子树入队 top.right&& queue.push(top.right) len-- } res.push(cur) } return res.reverse() };
199. 二叉树的右视图
只取最右边的子树,所以就找len === 1的值
var rightSideView = function(root) { const queue = [] const res = [] if(!root){ return res } queue.push(root) while(queue.length){ let len = queue.length while(len){ const top = queue.shift() top.left && queue.push(top.left) top.right && queue.push(top.right) if(len === 1){ res.push(top.val) } len -- } } return res };