一、题目

二、重点难点分析
1.因为按层打印的顺序决定应该先打印节点,所以我们从树的根节点开始分析:(1)为了能打印8的节点的子节点,我们应该在遍历到该节点时把值6和10两个节点保存到一个容器里,此时容器里有两个节点6,10(2)因为按照从左到右打印,所以把6拿出来,为了打印6的节点的子节点,把它的值5和7放入容器里,此时容器里为10,5,7(3)因为10 比5和7 都要早放,所以先拿出10进行遍历(注意:这就是我们通常说所说的队列,先入先出)
2.从上面分析可以得出该数据是一个队列。
三、代码分析
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[]} */ var levelOrder = function(root) { if(root==null) return []; let queue = []; let res = []; queue.push(root); while(queue.length){ let top = queue.shift(); res.push(top.val); if(top.left){ queue.push(top.left); } if(top.right){ queue.push(top.right); } } return res; };
四、扩展题

一、重点难点分析
1.按层次输出,原理和上一题是一样的,不过我们设置一个temp来进行保存该层的元素,然后放到res里(注意:因为层里面的元素不同,temp也会相应改变,所以我们这里声明用val)
二、代码分析
/** * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {number[][]} */ var levelOrder = function(root) { if( root == null) return []; let queue = []; queue.push(root); let res = []; while(queue.length){ var temp = []; let size = queue.length; for(let i = size; i>0; i--){ let top = queue.shift(); temp.push(top.val); if(top.left){ queue.push(top.left); } if(top.right){ queue.push(top.right); } } res.push(temp); } return res; };
浙公网安备 33010602011771号