「LeetCode」剑指Offer-32从上到下打印二叉树 III ⚡️

简介: 「LeetCode」剑指Offer-32从上到下打印二叉树 III ⚡️

image.png

前言🌧️



算法,对前端人来说陌生又熟悉,很多时候我们都不会像后端工程师一样重视这项能力。但事实上,算法对每一个程序员来说,都有着不可撼动的地位。


因为开发的过程就是把实际问题转换成计算机可识别的指令,也就是《数据结构》里说的,「设计出数据结构,在施加以算法就行了」。


当然,学习也是有侧重点的,作为前端我们不需要像后端开发一样对算法全盘掌握,有些比较偏、不实用的类型和解法,只要稍做了解即可。


题目🦀



剑指 Offer 32 - III. 从上到下打印二叉树 III

难度中等


请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。

例如: 给定二叉树: [3,9,20,null,null,15,7],


3
   / \
  9  20
    /  \
   15   7


返回其层次遍历结果:


[
  [3],
  [20,9],
  [15,7]

提示:


  1. 节点总数 <= 1000


解题思路🌵



  • 此题采用树的广度优先遍历即可求解
  • 新建一个队列并且在入队的节点新增一个层数的属性,(并且判断当前层数是奇数还是偶数来选择入队结果的方式)先访问当前节点,再将当前节点的子节点依次入队


解法🔥



/**
 * 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){return []}
    const queue=[[root,0]];
    const result=[];
    while(queue.length){
        const [node,l]=queue.pop()
        const {val,left,right}=node
        //如果result[l]为空,先创建
        if(!result[l]){
            result[l]=[]
        }
        //====核心代码在这里👇 判断出队的数据是来自第几层的,如果是奇数层则push末尾,偶数层则unshift插入队首
        if(l&1){
        result[l].push(val)
        }else{
            result[l].unshift(val)
        }
        //====
         if(node.left){
         queue.push([left,l+1])
         }
         if(node.right){
        queue.push([right,l+1])
        }
    }
    return result
};

时间复杂度:O(n)


空间复杂度:O(n)


结束语🌞



image.png


那么鱼鱼的LeetCode算法篇的剑指Offer-32从上到下打印二叉树 III⚡️就结束了,算法这个东西没有捷径,只能多写多练,多总结,文章的目的其实很简单,就是督促自己去完成算法练习并总结和输出,菜不菜不重要,但是热爱🔥,喜欢大家能够喜欢我的短文,也希望通过文章认识更多志同道合的朋友,如果你也喜欢折腾,欢迎加我好友,一起沙雕,一起进步。

相关文章
|
17天前
|
存储 SQL 算法
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
LeetCode力扣第114题:多种算法实现 将二叉树展开为链表
|
13天前
|
算法
二刷力扣--二叉树(3)
二刷力扣--二叉树(3)
|
13天前
二刷力扣--二叉树(2)
二刷力扣--二叉树(2)
|
13天前
二刷力扣--二叉树(1)基础、遍历
二刷力扣--二叉树(1)基础、遍历
|
17天前
|
存储 算法 数据可视化
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
力扣156题最全解法:如何上下翻转二叉树(递归与迭代方法详解,附图解)
|
17天前
|
算法 数据可视化 数据挖掘
LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )
LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )
LeetCode题目104: 二叉树的最大深度(递归\迭代\层序遍历\尾递归优化\分治法实现 )
|
17天前
|
存储 缓存 算法
LeetCode力扣题目111:多种算法对比实现二叉树的最小深度
LeetCode力扣题目111:多种算法对比实现二叉树的最小深度
|
13天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-2
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
13天前
|
算法 C++
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题-1
【数据结构与算法】:关于时间复杂度与空间复杂度的计算(C/C++篇)——含Leetcode刷题
|
14天前
|
索引
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找:山脉数组的峰顶索引、寻找峰值