美文网首页
二叉树--反序列化一棵树

二叉树--反序列化一棵树

作者: 今年花开正美 | 来源:发表于2020-07-05 21:49 被阅读0次

今天延续上一章的内容,反序列化一棵树。

题目介绍

给定一个序列化后的字符串,反序列化为一棵树,例如:

You may deserialize the following string:
"[1,2,3,null,null,4,5]"
as
    1
   / \
  2   3
     / \
    4   5

实现思路

反序列化的实现相比序列化简单点,整个过程如下:
1、先将字符串去除头尾的"["和"]",然后将字符串转换为数组。
2、遍历数组,从下标为0开始,逐步生成子节点。

实现代码

public class SolutionCodec {

   public TreeNode deserialize(String data) {
        if (data.indexOf("[") != 0 || data.indexOf("]") != data.length() - 1) {
            return null;
        }

        String[] arr = data.substring(1, data.length() - 1).split(",");
        if (arr != null && arr.length > 0) {
            return buildTreeNode(arr, 0);
        }

        return null;
    }

    private TreeNode buildTreeNode(String[] arr, int index) {
        TreeNode node = buildTreeNode(arr[index]);
        if (null != node) {
            int leftIndex = 2 * index + 1;
            if (leftIndex < arr.length) {
                node.left = buildTreeNode(arr, leftIndex);
            }
            int rIndex = 2 * (index + 1);
            if (rIndex < arr.length) {
                node.right = buildTreeNode(arr, rIndex);
            }
        }
        return node;
    }

    private TreeNode buildTreeNode(String valStr) {
        if (null == valStr || "".equals(valStr) || "null".equals(valStr)) {
            return null;
        }
        int val = Integer.valueOf(valStr);
        return new TreeNode(val);
    }
}

算法相关实现源码地址:https://github.com/xiekq/rubs-algorithms

不知不觉中数据结构相关的文章写了差不多30篇了,突然发现虽然题目做了,内容也发了,但是真正框架性的知识还没有什么头绪。
认真总结思考后觉得是对相关算法知识的总结不足,同时学习的真正驱动力不足。后续的内容会对自己由更高的要求,输出真正的质量文章。

相关文章

  • 二叉树--反序列化一棵树

    今天延续上一章的内容,反序列化一棵树。 题目介绍 给定一个序列化后的字符串,反序列化为一棵树,例如: 实现思路 反...

  • 剑指offer刷题记录(C++版本)(之七)

    61.序列化二叉树??? 题目:请实现两个函数,分别用来序列化和反序列化二叉树 二叉树的序列化是指:把一棵二叉树按...

  • JZ-061-序列化二叉树

    序列化二叉树 题目描述 请实现两个函数,分别用来序列化和反序列化二叉树。二叉树的序列化是指:把一棵二叉树按照某种遍...

  • 二叉树的三种遍历方法

    二叉树的序列化 为了方便构造二叉树来验证我们的算法,这里先介绍下二叉树的序列化和反序列化。 序列化 先序遍历整颗二...

  • LeetCode:序列化二叉树

    面试题37. 序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。示例:你可以将以下二叉树: 序列化为 ...

  • 二叉树序列化和反序列化

    二叉树序列化和反序列化 前序 序列化和反序列化

  • 序列化二叉树

    题目描述 请实现两个函数,分别用来序列化和反序列化二叉树 思路 二叉树的序列化就是采用前序遍历二叉树输出节点,再碰...

  • 面试题37:序列化二叉树

    题目 实现两个函数,分别用来序列化和反序列化二叉树 解题思路 序列化根据前序遍历的顺序序列化二叉树,从根节点开始,...

  • 剑指Offer-61 二叉树序列化

    请实现两个函数,分别用来序列化和反序列化二叉树 利用广度遍历实现二叉树的序列化和非序列化。核心思想:广度遍历

  • 剑指Offer Java版 面试题37:序列化二叉树

    题目:请实现两个函数,分别用来序列化和反序列化二叉树。可以根据前序遍历的顺序来序列化二叉树。在遍历二叉树碰到nul...

网友评论

      本文标题:二叉树--反序列化一棵树

      本文链接:https://www.haomeiwen.com/subject/btsbqktx.html