首页 > 其他分享 >BM27 按之字形顺序打印二叉树

BM27 按之字形顺序打印二叉树

时间:2023-01-01 23:11:07浏览次数:63  
标签:node 之字形 const curLevel BM27 tempQueue 遍历 二叉树 push

题目描述

image

思路分析

这题在上一道 层序遍历的基础上会更加方便。我们之前就可以得到每一层的数据,此时只是对每一层的遍历顺序做相应的处理即可
注意:
1. 我们在向tempQueue中添加元素时使用的是push ,比如我们一棵树的某一层从左到右的结果依次是
2 4 6 8,那么我们依次添加到tempQueue中的数据顺序也是 2 4 6 8 因为我们是对左子树和右子树分别判断,如果有结果 就将其push进去
2. 之后再处理结果时,是对数组中的每一项元素 shift处理,也就是 会依次得到 2 4 6 8 这是当我们遍历偶数层时想要得到的结果
3. 之后再遍历奇数层时,我们想要存进curLevel中的顺序为 8 6 4 2 ,此时从tempQueue中的数据仍然是shift出的,也就是我们依次得到的数据为 2 4 6 8,如何得到8 6 4 2?对于奇数深度,我们就要使用unshift,也就是从头部插入,就会得到我们想要的预期结果。
4. 其它部分的代码与之前的层序遍历类似,只是我们在每一层上加了一层判断,其余的不变。

代码参考

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

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
      
      if (flag) {
        curLevel.push(node.val)
        node.left && tempQueue.push(node.left)
        node.right && tempQueue.push(node.right)

      }
      // 如果是偶数层,则需要得到的结果顺序为 8 6 4 2, 
      else {
        curLevel.unshift(node.val)
        node.left && tempQueue.push(node.left)
        node.right && tempQueue.push(node.right)
      }
    }
    // 深度++
    depth++
    result.push(curLevel)
  }
  return result
}

标签:node,之字形,const,curLevel,BM27,tempQueue,遍历,二叉树,push
From: https://www.cnblogs.com/zx529/p/17019237.html

相关文章

  • BM26 求二叉树的层序遍历
    题目描述思路分析外部使用一个容器来存储,借助一个临时的栈来存储每一层的节点,之后根绝临时栈不为空的条件来遍历每一层,并将结果存到容器中代码参考constlevelOrder=......
  • 二叉树的先中后序遍历
    二叉树:每个节点最多只有两个字节点JS中通常用Object来模拟二叉树(val:1,left:0,right:0)constbt={val:1,left:{......
  • leetcode-563. 二叉树的坡度
    563.二叉树的坡度-力扣(Leetcode)坡度的计算需要4个数左子树所有节点的和右子树所有结点的和左子树的坡度右子树的坡度左子树与右子树节点差值的绝对值为当前节点......
  • 三化二叉树trick
    三选一化二叉套路概述这个套路是针对某一建模题的。三选一其实可以扩展到N选一,模型具体如下。发现某种状态可以扩展出\(N\)个状态,且有一个状态相较而言比较特殊(如其他......
  • leetcode-543. 二叉树的直径
    543.二叉树的直径-力扣(Leetcode)深度优先遍历,每个节点的直径等于左子树的最大深度加上右子树的最大深度,取一个最大值即可/***Definitionforabinarytreenode.......
  • 四、数据结构第四节——二叉树(知识点)
    四、数据结构第四节——二叉树今天开启美妙的二叉树的学习~~~“树”是我们第一次见到的”非线性”的数据结构。二叉树:是树上每个节点都只有两个子节点的简单的树。知......
  • 二叉树
    二叉树的概念树,有三个比较相似的概念:高度,深度,层;它们的定义为:节点的高度:节点到叶子节点的最长路径节点的深度:根节点到这个节点所经历的边的个数节点的层数:节点的深度+......
  • 关于二叉树深度 和 高度的问题
    根节点的高度=最大深度(后序遍历)104.二叉树的最大深度publicintmaxDepth(TreeNoderoot){returngetDepth(root);}publicintgetDepth(TreeNo......
  • 二叉树
    二叉树的定义二叉树是一种有序树,它是节点的一个有限集合,该集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。它的特点是每个节......
  • #yyds干货盘点# 名企真题专题:将满二叉树转换为求和树
    1.简述:描述给出满二叉树的前序遍历结果和中序遍历结果,编写算法将其转化为求和树什么是求和树:二叉树的求和树,是一颗同样结构的二叉树,其树中的每个节点将包含原始树中的左子......