答对了这道题,我拿到了阿里30K的offer——剑指 Offer 32 - II. 从上到下打印二叉树 II

Java知识体系!Hive-JDBC操作 <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/metastore?characterEncoding=UTF-8&createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option... 阅读详情

同学去阿里面试,项目问完了,面试官感觉一般,出了下面这道题。往往面试官觉得项目一般,没有太多亮点的时候,就会考察应聘者的基础知识是否扎实,基础知识扎实的话,也能进大厂;一般来讲,项目和基础二者必须有其一,才有进大厂的可能。

这位同学思考了一会儿,顺利的做除了这道题,并且给出了解答,面试官很满意,顺利的拿到了offer。大家好好看下下面这道题。

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

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

    3
   / \
  9  20
    /  \
   15   7

返回其层次遍历结果:

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

提示:

节点总数 <= 1000

解法一:层序遍历 + 双端队列

这道题广度优先搜索,BFS,而众所周知,BFS往往需要借助 队列 的先入先出特性来实现。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();

        if(root != null) queue.add(root);
        while(!queue.isEmpty()){
            LinkedList<Integer> tmp = new LinkedList<>();
            for(int i=queue.size(); i>0; i--){
                TreeNode node = queue.poll();
                if(res.size() % 2 == 0) tmp.addLast(node.val);//奇数层,顺序添加
                else tmp.addFirst(node.val);//偶数层,添加在队列头部
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
            }
            res.add(tmp);
        }
        return res;
    }
}

解法二:层序遍历 + 倒序

class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new LinkedList<>();
        List<List<Integer>> res = new ArrayList<>();
        if(root != null) queue.add(root);
        while(!queue.isEmpty()) {
            List<Integer> tmp = new ArrayList<>();
            for(int i = queue.size(); i > 0; i--) {
                TreeNode node = queue.poll();
                tmp.add(node.val);
                if(node.left != null) queue.add(node.left);
                if(node.right != null) queue.add(node.right);
            }
            if(res.size() % 2 == 1) Collections.reverse(tmp);//倒序
            res.add(tmp);
        }
        return res;
    }
}
​热电偶测温电路图(一)​ 高精度热电偶测温电路图 此设计概括了提供传感器诊断所必需的抗混叠滤波器和偏置电阻器。此示例还提供了一种新颖的方式,即使用ADS1118上的板载温度传感器完成对系统的冷端补偿。对于热电偶线性化,此设计还提供了一种非常简单的、可以在大多数微控制器上实施的线性算法。 缺点就是太贵。 特性 测量K型热电偶温度 精度1°C 高精度/可重复性0.2°C 包含冷端补偿 包含软件算法 使用ADS111816位ADC(带PGA) 原理图/方框图 热电偶测温电路图(二) OP07构成的高稳定热电 阅读详情

相关推荐

关于卷积过程中通道数如何变化问题

对卷积操作前后通道数问题进行解释,输出通道数=卷积核的个数。

你好,明天,,的博客 4316

刷完剑指offer,相关知识点总结归纳,避坑。

str.str.trim() 删除字符串首尾空白符; char[ ] arr=str.toCharArray( ); 字符串转化为字符数组; ASCII码中48~57为0到9十个阿拉伯数字。C>=’0’ && C<=’9’ 判断字符C是否为数字; 字符串为空或者字符串为0是需要进行判断的。if(str==null || str.length() == 0)return -1; 字符串str长度判断 str.length>0 数组array长度判断 for(int i

m0_48256515的博客 154

非模式物种PySCENIC分析流程

外的物种想要做scenic分析的话, 可以使用同源基因转换后再进行分析, 将要分析的物种的gene Symbol转换为人、小鼠或者是果蝇的gene Symbol后进行分析。odiscus sinensis(中华鳖)的基因-细胞的矩阵,进行pyscenic分析的话,可参考以下示例。目前pyscenic分析支持的物种仅为人、小鼠和果蝇,其他物种暂时还没有相应的数据库,因。本教程基于Linux及服务。SCENIC转录因子分析。器中的Rstudio环境。例如我们有一个Pel。

weixin_47195452的博客 935

刷《剑指offer》的感受

刷《剑指Offer》的感受我的刷题感受因为大型公司笔试面试的需要,我决定开始慢慢刷题,每天累积一点,问了一些学长刷什么样的题目比较好,有些搞过ACM的学长建议leetcode,leetcode我看了一下,题目还是有一定的难度的,后来在牛客网上看到《剑指offer》,就开始在上面刷题了。 牛客网上的《剑指offer》总共66题,我完成了63题,还有些题目比较古怪(能力有限),就不想做了,牛客网对于题目

李连毛 4万+

保姆级教程:用STM32CubeMX给STM32F407配置RTC秒中断,并解决掉电时间丢失问题

本文详细介绍了如何使用STM32CubeMX为STM32F407配置RTC秒中断,并解决掉电时间丢失问题。通过硬件原理与软件配置的双视角解析,帮助开发者实现精确计时与时间持久化,适用于物联网设备和工业控制器等场景。

weixin_42519733的博客 137

Xilinx HydraMini试玩教程

HydraMini是Xilinx推出的基于Pynq-Z2开发板的自动驾驶开发小车,其有着简单易学、高灵活性、高扩展性、高性能等优良特性,是研究人员和学生进入自动驾驶领域的一个平台。本教程会通过最基础的讲解和步骤带领读者熟悉这个平台的基本开发流程。

qq_25762163的博客 1773

3-24 阿里春招笔试(淘系)

最后一分钟AK,有点惊险。 A. 很简单的线性dp,给定n和n个元素(下标1-n),玩家初始位置在1处,现有两种操作,向前走一步和向前走两步,设当下玩家在i处,向前走一步到i+1处只能拿到第i+1个位置一半的值即a[i+1]/2,走两步可以拿到i+2个位置全部的值,即a[i+2],问玩家走到最后总共能拿到最大值为多少。 状态转移方程: dp[i] = max( dp[i-2]+a[i], dp[i-1]+a[i]/2) 代码 #include <bits/stdc++.h> #define ll

Kwjdefulgn的博客 383

QGIS编译(跨平台编译)之五十六:QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

QGIS编译;QScintilla编译、QScintilla安装(Windows、Linux、MacOS环境下编译、安装)

LuckyHanMo的博客 1909

面试必刷-《剑指offer》刷题小结

写在前面 面试季来了,不管是作为面试者还是以后作为面试官,了解算法这门程序员之间的沟通方式都是非常必要的。 找过工作的朋友应该都听说过《剑指offer》,笔者也是战5渣,本文主要对我这十多天刷过的《剑指offer》做个简单的分类小结,方便后面专项复(练)习~ 剑指offer推荐刷题地址: https://www.nowcoder.com/ta/coding-interviews 我的所有AC题解...

阿里巴巴算法工程师 5512

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4792

【Unity 实用工具篇】 | Unity网格破碎插件 unity-fracture

前面写过一篇Unity中物体破碎效果的插件:【Unity 实用工具篇】 | Unity物体破碎效果 OpenFracture 本文介绍一个另外的工具unity-fracture,也可以实现网格破碎效果,且功能与OpenFracture略有差异。

努力前行,总会成为自己心中的那道光 1万+

LeetCode(剑指 Offer)- 题集

LeetCode(剑指 Offer)- 解题集 # 题名 难度 解题 企业 05 替换空格 简单 查看解题 小米集团 ……

2299

lammps教程:官方自带eam_database程序拟合EAM势方法介绍

使用lammps模拟金属体系,最常用的势函数为eam、meam势。 对于大多数金属或者合金来说,可以从网上下载相对应的eam或meam势力场文件。 而对于一些新的合金材料,可能就找不到相对应的力场文件。 解决的方法有两种,一是采用混合势(pair_style hybrid),第二种方法是自己拟合势函数文件。 混合势的写法在前面文章中已经介绍过,本文介绍一种拟合EAM势的方法。 该方法是运行Xiaowang Zhou编写的一个拟合程序,该程序可自动生成所需要的合金势。 这个程序能够拟合的合金元素有: Cu,

lammps_jiayou的博客 4619

【Android -- 面试】复习指南之数据结构 & 算法

对于算法面试准备,无疑就是刷《剑指Offer》+ LeetCode 效果最佳。刷《剑指Offer》是为了建立全面的算法面试思维,打下坚实的基础,刷LeetCode则是为了不断强化与开阔我们自己的算法思想。

Kevin Learn Android 847

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

python解决递归栈溢出的方法,尾递归

解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。 尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。 上面的fact(n)函数由于return n * fact(n - 1)引入了...

devcy的博客 1517

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

递归及DP

递归及DP递归动态规划LeetCode参考文献 递归 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有...

devcy的博客 1440

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList

输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。解法1234 解法1 # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回从尾部到头部的列表值序...

devcy的博客 1407

判断是否为平衡二叉树

最直接的做法,遍历每个结点,借助一个获取树深度的递归函数,根据该结点的左右子树高度差判断是否平衡,然后递归地对左右子树进行判断。 public classSolution { public boolean IsBalanced_Solution(TreeNode root) { if(root == null) { return true; ...

devcy的博客 810

字符串转换成一个整数

字符串转换成一个整数 边界条件: 数据上下 溢出 空字符串 只有正负号 有无正负号 错误标志输出 public class Solution { public int StrToInt(String str) { if(str == null || str.length() == 0)return 0; int start; int ta...

devcy的博客 423

Leetcode 17. 电话号码的字母组合 46. 全排列

@所有人 【任务6,实战递归】 实战递归:完成Leetcode上的Letter Combinations of a Phone Number(17)及permutations(46)! 同时温习前五天内容,做出总结! 打卡方式:提交递归的心得笔记&amp;nbsp; +LeetCode提交结果与代码 截止时间:作业在1月31日22:00完成;点评在2月1日中午12:00完成。 大家如果在作业中引用了别人的...

devcy的博客 395

实战DP

实战DP

devcy的博客 337

leetcode求二叉树深度

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 非递归写法:层次遍历 import java.util.Queue; import java.util.LinkedList; public class Solution { public int TreeDepth(TreeNode pRoot) { ...

devcy的博客 335

LeetCode 14.最长公共前缀

最长公共前缀LeetCode 14.[最长公共前缀](https://leetcode-cn.com/problems/longest-common-prefix/)参考文献 LeetCode 14.最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 “”。 示例 1: 输入: [“flower”,“flow”,“flight”] 输出: “fl” 示...

devcy的博客 332

链表

链表概念介绍结点结构头指针head和终端结点单链表leetcode 概念介绍 链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。 以“结点的序列”表示线性表称作线性链表(单链表),单链表是链式存取的结构。 结点结构 ┌───┬───┐ │data │next │ └───┴───┘ d...

devcy的博客 305

LeetCode和为S的两个数字

输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 数列满足递增,设两个头尾两个指针i和j, 若ai + aj == sum,就是答案(相差越远乘积越小) 若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数已是不可能),j -= 1 若ai + aj < sum,ai肯定不是答案之一...

devcy的博客 298

144. 二叉树的前序遍历 Binary Tree Preorder Traversal

给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 递归: public List<Integer> preorderTraversal(TreeNode root) { List<Integer> ret = new A...

devcy的博客 266
上一篇: BAT常见面试算法题:在排序数组中查找数字
下一篇: flink 实现CommonSink,自动生成sql,自动匹配字段值
程序员椰子橙
博客等级 码龄9年 46粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值