前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天一道剑指offer-序列化二叉树

每天一道剑指offer-序列化二叉树

作者头像
乔戈里
发布2019-03-04 10:51:11
2900
发布2019-03-04 10:51:11
举报
文章被收录于专栏:Java那些事Java那些事

序列化二叉树

题目描述

请实现两个函数,分别用来序列化和反序列化二叉树

解析

怎么序列化的,就怎么反序列化。这里 deserialize反序列化时对于序列化到 String[]arr的哪个结点值来了的变量 index有两个坑(都是笔者亲自踩的):

  1. index声明为成员的 intJava中函数调用时不会改变基本类型参数的值的,因此不要企图使用 int表示当前序列化哪个结点的值来了
  2. 之后笔者想用 Integer代替,但是 IntegerString一样,都是不可变对象,所有的值更改操作在底层都是拆箱和装箱生成新的 Integer,因此也不要使用 Integer做序列化到哪一个结点数值来了的计数器
  3. 最好使用数组或者自定义的类(在类中声明一个 int变量)
代码语言:javascript
复制
String Serialize(TreeNode root) {    if(root == null){        return "#_";    }    //处理头结点、左子树、右子树    String res = root.val + "_";    res += Serialize(root.left);    res += Serialize(root.right);    return res;}
TreeNode Deserialize(String str) {    if(str == null || str.length() == 0){        return null;    }    Integer index = 0;    return deserialize(str.split("_"), new int[]{0});}
//怎么序列化的,就怎么反序列化TreeNode deserialize(String[] arr, int[] index){    if("#".equals(arr[index[0]])){        index[0]++;        return null;    }    //头结点、左子树、右子树    TreeNode root = new TreeNode(Integer.parseInt(arr[index[0]]));    index[0]++;    root.left = deserialize(arr, index);    root.right = deserialize(arr, index);    return root;}

出自:http://www.zhenganwen.top

已获授权

END

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员乔戈里 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 序列化二叉树
    • 题目描述
      • 解析
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档