二叉树的层序遍历,就是一层层的遍历二叉树,从左到右。
第一题。
具体的思路就是要创建两个数组,一个作为结果返回,当做一个临时队列。
先把根节点输入,加入结果数组后吧根节点删除
然后把根节点下的两个子节点再放入临时数组,循环遍历即可
102.二叉树的层序遍历
var levelOrder = function(root) {
var levelOrder = function(root) {
//结果数组
let res = []
//临时数组
let queue = []
//把根节点插入队列之中
queue.push(root)
//判断是否有根节点
if(root === null) return res
while(queue.length!==0){
// 队列长度
let length = queue.length
// 记录层节点数,每一层换一次
let curLevel = []
for(let i = 0;i<length;i++){
let node = queue.shift();
// 存放当层节点
curLevel.push(node.val)
// 存放下一层节点
node.left&&queue.push(node.left)
node.right&&queue.push(node.right)
}
res.push(curLevel)
}
return res
107. 二叉树的层序遍历 II
给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
思路跟第一个差不多,只不过是把答案反过来
/**
* 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 levelOrderBottom = function(root) {
// 结果数组
let res= []
// 临时队列
let queue = []
if(!root) return res
queue.push(root)
while(queue.length!==0){
let n = queue.length
// 临时数组
let curLevel = []
// 每次循环都会把队列的第一个元素切下来,塞进临时数组中
for(let i = 0;i<n;i++){
let node = queue.shift()
curLevel.push(node.val)
node.left&&queue.push(node.left)
node.right&&queue.push(node.right)
}
res.unshift(curLevel)
}
return res
};