剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历
剑指 Offer 37. 序列化二叉树
Offer_37
题目描述
题目解析
- 本题主要考察的就是二叉树的层次遍历。
- 层次遍历时可以根据二叉树的特点将空结点也进栈。
- 反序列化时同样可以根据层次遍历的思路,每次生成当前结点的左右子树指针结点。
java代码
package com.walegarrett.offer;
/**
* @Author WaleGarrett
* @Date 2021/2/4 23:01
*/
import java.util.LinkedList;
import java.util.Queue;
/**
* 题目描述:请实现两个函数,分别用来序列化和反序列化二叉树。
* 你可以将以下二叉树:
* 1
* / \
* 2 3
* / \
* 4 5
* 序列化为 "[1,2,3,null,null,4,5]"
*/
public class Offer_37 {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
if(root == null)
return "[]";
Queue<TreeNode> que = new LinkedList<>();
que.add(root);
String s = "[";
while(!que.isEmpty()){
TreeNode now = que.poll();
if(now != null){
que.add(now.left);
que.add(now.right);
s = s + String.valueOf(now.val) + ",";
}else s += "null,";
}
s = s.substring(0, s.length()-1);
s+="]";
return s;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if(data.length() <= 2)
return null;
data = data.substring(1, data.length() - 1);
String []s = data.split(",");
int len = s.length;
TreeNode head = new TreeNode(Integer.parseInt(s[0]));
Queue<TreeNode> que = new LinkedList<>();
que.add(head);
int index = 1;
while(!que.isEmpty()){
TreeNode now = que.poll();
if(!s[index].equals("null")){
now.left = new TreeNode(Integer.parseInt(s[index]));
que.add(now.left);
}
index++;
if(!s[index].equals("null")){
now.right = new TreeNode(Integer.parseInt(s[index]));
que.add(now.right);
}
index++;
}
return head;
}
}
剑指 Offer 37. 序列化二叉树 + 二叉树的层次遍历的更多相关文章
- 力扣 - 剑指 Offer 37. 序列化二叉树
目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...
- 【Java】 剑指offer(37) 序列化二叉树
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请实现两个函数,分别用来序列化和反序列化二叉树. 思路 一般情况下 ...
- 每日一题 - 剑指 Offer 37. 序列化二叉树
题目信息 时间: 2019-06-29 题目链接:Leetcode tag:序列化 二叉树 队列 难易程度:中等 题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树. 示例: 1 / \ 2 ...
- 【剑指Offer】序列化二叉树 解题报告(Python)
[剑指Offer]序列化二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...
- 剑指Offer - 九度1521 - 二叉树的镜像
剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...
- 剑指Offer - 九度1368 - 二叉树中和为某一值的路径
剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...
- 剑指Offer - 九度1350 - 二叉树的深度
剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...
- 剑指Offer:对称的二叉树【28】
剑指Offer:对称的二叉树[28] 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目分析 Java题解 /* publi ...
- [剑指 Offer 28. 对称的二叉树]
剑指 Offer 28. 对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / ...
随机推荐
- hdu1890 Robotic Sort (splay+区间翻转单点更新)
Problem Description Somewhere deep in the Czech Technical University buildings, there are laboratori ...
- 第三方库:logger,自定义日志封装模块
为了使用方便,二次封装logger. import os import datetime from loguru import logger class Logings: __instance = N ...
- codeforces 870C
C. Maximum splitting time limit per test 2 seconds memory limit per test 256 megabytes input standar ...
- 康托展开:对全排列的HASH和还原,判断搜索中的某个排列是否出现过
题目:http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=2297 前置技能:(千万注意是 ...
- Linux 驱动框架---驱动中的并发
并发指多个执行单元被同时.并行的执行,而并发执行的单元对共享资源的访问就容易导致竟态.并发产生的情况分为抢占和并行(多核)和硬抢占(中断).Linux为解决这一问题增加了一系列的接口来解决并发导致的竟 ...
- Android 神奇的SpannableStringBuilder
一 无图言屌 先看看神奇的效果 仅用一个TextView实现 二 SpannableStringBuilder Google官方介绍 This is the class for text whose ...
- CURL (CommandLine Uniform Resource Locator) 简易教程!
1 http://curl.haxx.se/ http://curl.haxx.se/docs/httpscripting.html curl is an open source command li ...
- Micro Frontends & microservices
Micro Frontends & microservices https://micro-frontends.org/ https://github.com/neuland/micro-fr ...
- nvm install node error
nvm install node error ➜ mini-program-all git:(master) nvm install 10.15.3 Downloading and installin ...
- parcel bug & not support normal import React & ReactDOM module
bug report not support normal import React & ReactDOM module, why Code Sample OK import * as Rea ...