剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储
剑指 Offer 32 - II. 从上到下打印二叉树 II
Offer_32
题目描述:

题解分析:
- 这道题我一开始想到的解决方法较粗暴,就是使用两个变量来记录当前层的节点数和下一层的结点数。
- 以上的方法虽然可行,但是较复杂。实际每次队列里存储的就是当前层的所有结点,利用这个性质可以较快解题。
解法一:
package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2021/2/1 14:50
*/
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* 题目:从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
* 解析:使用队列按照层次打印层次遍历序列
*/
public class Offer_32_2 {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null)
return new ArrayList<List<Integer>>();
List<List<Integer>> list = new ArrayList<>();
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
int currentLayerNum = 1;
int nextLayerNum = 0;
int cnt = 0;
List<Integer> current = new ArrayList<>();
while(!que.isEmpty()){
TreeNode temp = que.peek();
que.poll();
current.add(temp.val);
cnt++;
if(temp.left != null) {
que.offer(temp.left);
nextLayerNum++;
}
if(temp.right != null) {
que.offer(temp.right);
nextLayerNum++;
}
if(cnt == currentLayerNum){//当前层已经遍历结束
currentLayerNum = nextLayerNum;
nextLayerNum = 0;
cnt = 0;
list.add(current);
current = new ArrayList<>();//注意这里不能使用current.clear,否则所有的队列都将为空
}
}
return list;
}
}
解法二:
class Offer_32_2_1 {
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null)
return new ArrayList<List<Integer>>();
List<List<Integer>> list = new ArrayList<>();
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
while(!que.isEmpty()){
List<Integer> current = new ArrayList<>();
for(int i = que.size(); i> 0; i--){
TreeNode temp = que.peek();
que.poll();
current.add(temp.val);
if(temp.left != null) {
que.offer(temp.left);
}
if(temp.right != null) {
que.offer(temp.right);
}
}
list.add(current);
}
return list;
}
}
剑指 Offer 32 - II. 从上到下打印二叉树 II + 层次遍历二叉树 + 按层存储的更多相关文章
- 剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印, ...
- 剑指 Offer 32 - I. 从上到下打印二叉树
剑指 Offer 32 - I. 从上到下打印二叉树 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 ...
- 剑指 Offer 32 - III. 从上到下打印二叉树 III + 双端队列使用 + 蛇形打印层次遍历序列 + 正倒序输出
剑指 Offer 32 - III. 从上到下打印二叉树 III Offer_32_3 题目详情 题解分析 本题我想的比较复杂,其实题目的要求只是需要遍历的结果逆序和正序交替,这个其实可以使用Coll ...
- 剑指 Offer 32 - I. 从上到下打印二叉树 + 层次遍历二叉树
剑指 Offer 32 - I. 从上到下打印二叉树 Offer_32_1 题目描述 解题思路 这题属于简单题,考察的是我们对二叉树以及层次遍历的方法. 这里只需要使用简单的队列即可完成二叉树的层次遍 ...
- 每日一题 - 剑指 Offer 32 - I. 从上到下打印二叉树
题目信息 时间: 2019-06-25 题目链接:Leetcode tag:BFS(广度优先搜索) 队列 难易程度:中等 题目描述: 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印 ...
- 每日一题 - 剑指 Offer 32 - III. 从上到下打印二叉树 III
题目信息 时间: 2019-06-25 题目链接:Leetcode tag:双端队列 难易程度:中等 题目描述: 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右 ...
- 剑指offer 23:从上往下打印二叉树
题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解题思路 按照从左往右从上到下的顺序打印节点,需要我们维护一个队列,这个队列放入元素的顺序是访问队头节点(起始先放入根节点),则若当前 ...
- 剑指offer——33分行从上到下打印二叉树
题目描述 从上到下按层打印二叉树,同一层结点从左至右输出.每一层输出一行. 题解: 使用BFS,按层打印即可 class Solution { public: vector<vector&l ...
- 剑指offer-面试题23.从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中 的二叉树,则依次打印出8.6.10.5.7.9.11二叉树结点的定义如下: struct BinaryTr ...
- 【Warrior刷题笔记】剑指offer 32. 三道题,让你学会二叉树的深度广度优先遍历与递归迭代技术
题目一 剑指 Offer 32 - I. 从上到下打印二叉树 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/cong-shang-dao-xi ...
随机推荐
- poj3757 Training little cats
Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 11496 Accepted: 2815 Description Face ...
- 母函数 <普通母函数(HDU - 1028 ) && 指数型母函数(hdu1521)>
给出我初学时看的文章:母函数(对于初学者的最容易理解的) 普通母函数--------->HDU - 1028 例题:若有1克.2克.3克.4克的砝码各一 枚,能称出哪几种重量?各有几种可能方案? ...
- 使用eclipse搭建第一个java web应用
一. 首先是eclipse得下载,你要下载Eclipse IDE for Java EE这种类型的,我之前下载的Eclipse IDE for Enterprise Java Developers是官 ...
- 01.原生态jdbc程序中问题总结
1.数据库启动包配置到工程目录中(mysql5.1) mysql-connector-java-5.1.7-bin.jar 2.jdbc原生态操作数据库(程序) 操作mysql数据库 1 packag ...
- python之字符串replace的方法
1.描述 replace()方法把字符串中的old(旧字符串)替换成new(新字符串),如果有指定第三个参数max,则替换的不超过max次 2.语法 str.replace(old,new[,max] ...
- 如何将 js 同步方法转换成异步方法
如何将 js 同步方法转换成异步方法 // promise export const getUserToken = () => new Promise((resolve, reject) =&g ...
- How to build a sortable table in native js?
How to build a sortable table in native/vanilla js? H5 DnD https://developer.mozilla.org/zh-CN/docs/ ...
- CSS style color all in one
CSS style color all in one https://developer.mozilla.org/en-US/docs/Web/CSS/color_value /* Hexadecim ...
- scroll tabs
scroll tabs https://github.com/NervJS/taro-ui/blob/dev/src/components/tabs/index.tsx https://github. ...
- Flutter ColorFiltered 将ColorFilter应用于其子级。
ColorFiltered ColorFilter BlendMode Example <summary>main.dart</summary> import 'package ...