二叉树的层序遍历,就是一层层的遍历二叉树,从左到右。
第一题。
具体的思路就是要创建两个数组,一个作为结果返回,当做一个临时队列。
先把根节点输入,加入结果数组后吧根节点删除
然后把根节点下的两个子节点再放入临时数组,循环遍历即可
102.二叉树的层序遍历
var levelOrder = function(root) {
var levelOrder = function(root) {//结果数组let res = []//临时数组let queue = []//把根节点插入队列之中queue.push(root)//判断是否有根节点if(root === null) return reswhile(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 resqueue.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};
