二叉树的层序遍历,就是一层层的遍历二叉树,从左到右。

第一题。
具体的思路就是要创建两个数组,一个作为结果返回,当做一个临时队列。
先把根节点输入,加入结果数组后吧根节点删除
然后把根节点下的两个子节点再放入临时数组,循环遍历即可

102.二叉树的层序遍历

var levelOrder = function(root) {

  1. var levelOrder = function(root) {
  2. //结果数组
  3. let res = []
  4. //临时数组
  5. let queue = []
  6. //把根节点插入队列之中
  7. queue.push(root)
  8. //判断是否有根节点
  9. if(root === null) return res
  10. while(queue.length!==0){
  11. // 队列长度
  12. let length = queue.length
  13. // 记录层节点数,每一层换一次
  14. let curLevel = []
  15. for(let i = 0;i<length;i++){
  16. let node = queue.shift();
  17. // 存放当层节点
  18. curLevel.push(node.val)
  19. // 存放下一层节点
  20. node.left&&queue.push(node.left)
  21. node.right&&queue.push(node.right)
  22. }
  23. res.push(curLevel)
  24. }
  25. return res

第二题。

107. 二叉树的层序遍历 II

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
思路跟第一个差不多,只不过是把答案反过来

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root
  11. * @return {number[][]}
  12. */
  13. var levelOrderBottom = function(root) {
  14. // 结果数组
  15. let res= []
  16. // 临时队列
  17. let queue = []
  18. if(!root) return res
  19. queue.push(root)
  20. while(queue.length!==0){
  21. let n = queue.length
  22. // 临时数组
  23. let curLevel = []
  24. // 每次循环都会把队列的第一个元素切下来,塞进临时数组中
  25. for(let i = 0;i<n;i++){
  26. let node = queue.shift()
  27. curLevel.push(node.val)
  28. node.left&&queue.push(node.left)
  29. node.right&&queue.push(node.right)
  30. }
  31. res.unshift(curLevel)
  32. }
  33. return res
  34. };

第三题。

199. 二叉树的右视图