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

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

作者: 今年花开正美 | 来源:发表于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篇了,突然发现虽然题目做了,内容也发了,但是真正框架性的知识还没有什么头绪。
    认真总结思考后觉得是对相关算法知识的总结不足,同时学习的真正驱动力不足。后续的内容会对自己由更高的要求,输出真正的质量文章。

    相关文章

      网友评论

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

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