剑指 Offer 37. 序列化二叉树

Offer_37

题目描述

题目解析

  1. 本题主要考察的就是二叉树的层次遍历。
  2. 层次遍历时可以根据二叉树的特点将空结点也进栈。
  3. 反序列化时同样可以根据层次遍历的思路,每次生成当前结点的左右子树指针结点。

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. 序列化二叉树 + 二叉树的层次遍历的更多相关文章

  1. 力扣 - 剑指 Offer 37. 序列化二叉树

    目录 题目 思路 代码 复杂度分析 题目 剑指 Offer 37. 序列化二叉树 思路 序列化其实就是层序遍历 但是,要能反序列化的话,前.中.后.层序遍历是不够的,必须在序列化时候保存所有信息,这样 ...

  2. 【Java】 剑指offer(37) 序列化二叉树

    本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 请实现两个函数,分别用来序列化和反序列化二叉树. 思路 一般情况下 ...

  3. 每日一题 - 剑指 Offer 37. 序列化二叉树

    题目信息 时间: 2019-06-29 题目链接:Leetcode tag:序列化 二叉树 队列 难易程度:中等 题目描述: 请实现两个函数,分别用来序列化和反序列化二叉树. 示例: 1 / \ 2 ...

  4. 【剑指Offer】序列化二叉树 解题报告(Python)

    [剑指Offer]序列化二叉树 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目 ...

  5. 剑指Offer - 九度1521 - 二叉树的镜像

    剑指Offer - 九度1521 - 二叉树的镜像2013-11-30 23:32 题目描述: 输入一个二叉树,输出其镜像. 输入: 输入可能包含多个测试样例,输入以EOF结束.对于每个测试案例,输入 ...

  6. 剑指Offer - 九度1368 - 二叉树中和为某一值的路径

    剑指Offer - 九度1368 - 二叉树中和为某一值的路径2013-11-23 03:46 题目描述: 输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结 ...

  7. 剑指Offer - 九度1350 - 二叉树的深度

    剑指Offer - 九度1350 - 二叉树的深度2013-11-23 00:54 题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的 ...

  8. 剑指Offer:对称的二叉树【28】

    剑指Offer:对称的二叉树[28] 题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的.注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的. 题目分析 Java题解 /* publi ...

  9. [剑指 Offer 28. 对称的二叉树]

    剑指 Offer 28. 对称的二叉树 请实现一个函数,用来判断一棵二叉树是不是对称的.如果一棵二叉树和它的镜像一样,那么它是对称的. 例如,二叉树 [1,2,2,3,4,4,3] 是对称的. 1 / ...

随机推荐

  1. 组合数取模及Lucas定理

    引入: 组合数C(m,n)表示在m个不同的元素中取出n个元素(不要求有序),产生的方案数.定义式:C(m,n)=m!/(n!*(m-n)!)(并不会使用LaTex QAQ). 根据题目中对组合数的需要 ...

  2. Warm up HDU - 4612 树的直径

    题意:给出n个点和m条边的无向图,存在重边,问加一条边以后,剩下的桥的数量最少为多少. 题解: 你把这个无向图缩点后会得到一个只由桥来连接的图(可以说这个图中的所有边都是桥,相当于一棵树),然后我们只 ...

  3. Codeforces Round #613 (Div. 2) B. Just Eat It! (DP)

    题意:有一个长度为\(n\)的序列,找出最大的长度不为\(n\)的子段和,问最大子段和是否小于所有元素和. 题解:最大子段和我们可以直接用dp来找,每次状态转移为:\(dp[i]=max(dp[i-1 ...

  4. 实战交付一套dubbo微服务到k8s集群(3)之二进制安装Maven

    maven官网:https://maven.apache.org/ maven二进制下载连接:https://archive.apache.org/dist/maven/maven-3/3.6.1/b ...

  5. GO - LLT

    GoConvey: https://www.jianshu.com/p/e3b2b1194830 GoMonkey: https://www.jianshu.com/p/2f675d5e334e Go ...

  6. Xtrabackup 物理备份

    目录 Xtrabackup 安装 Xtrabackup 备份介绍 Xtrabackup全量备份 准备备份目录 全量备份 查看全量备份内容 Xtrabackup 全量备份恢复数据 删除所有数据库 停止数 ...

  7. codeforce 849A

    A. Odds and Ends time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  8. 从.NET看微软的焦虑

    节日没事,就像聊聊微软的NET. 1.孩子静悄悄,必定在作妖 截止目前,微软的市值达到1.85万亿美元,按说,这样一个宙斯级的巨无霸应该过的非常舒坦, 但是,和微软市值成鲜明的反差,我们从.NET的发 ...

  9. CN_Week2_Neuron_code

    CN_Week1_Neuron_code on Coursera Abstract for week2: -- 1. Technique for recording from the brain. - ...

  10. Linux command find All In One

    Linux command find All In One $ find -h # find: illegal option -- h # usage: # find [-H | -L | -P] [ ...