BM26 求二叉树的层序遍历

题目描述

image

思路分析

外部使用一个容器来存储,借助一个临时的栈来存储每一层的节点,之后根绝临时栈不为空的条件来遍历每一层,并将结果存到容器中

代码参考

/*
  给定一个二叉树,返回该二叉树的之字形层序遍历,
  (第一层从左向右,下一层从右向左,一直这样交替)
*/

const Print = function (root) {
  // 初始化result以及临时数组用于存储
  const result = [],
    tempQueue = []
  // 表示当前深度
  let depth = 0
  if (!root) return result
  tempQueue.push(root)
  while (tempQueue.length) {
    const len = tempQueue.length
    const curLevel = []
    const flag = depth % 2 === 0
    for (let i = 0; i < len; i++) {
      // 存数据时都是push进数组的,是有顺序的,先left再right,比如 2 4 6 8
      // 我们对数组是shift,也就是会先弹出2 之后在 4 6 8
      const node = tempQueue.shift()
      // 如果是偶数层,那么需要得到的结果为 2 4  6 8
      // 如果是偶数层,则需要得到的结果顺序为 8 6 4 2, 
      flag ? curLevel.push(node.val) : curLevel.unshift(node.val)
      node.left && tempQueue.push(node.left)
      node.right && tempQueue.push(node.right)
    }
    // 深度++
    depth++
    result.push(curLevel)
  }
  return result
}
posted @ 2023-01-01 22:04  含若飞  阅读(17)  评论(0编辑  收藏  举报