美文网首页
面试题37:序列化和反序列化二叉树

面试题37:序列化和反序列化二叉树

作者: 繁星追逐 | 来源:发表于2019-11-08 17:33 被阅读0次

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

序列化,递归函数传入一个节点,一个字符串,函数中分为两种,如果当亲节点为空,则转化为#,否则加入节点数字,然后依次对左右节点做同样操作。

反序列化,同样递归函数,将字符串去掉逗号转化为字符串数组。设置一个全局索引记录反序列化的位置,递归函数参数为字符串数组,首先给索引加1(初始为-1),如果当前字符是#号或者索引越界则返回空,否则构造新节点,左右子树调用自身形成,最后返回根节点。
代码如下

public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

        public TreeNode(int val) {
            this.val = val;

        }

    }

    /**
     * 使用递归
     * 1. 对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点
     * 不为空时,在转化val所得的字符之后添加一个' , '作为分割。对于空节点则以 '#' 代替。
     * 2. 对于反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树
     */
    //全局变量索引记录字符串位置
    private int index = -1;
    String Serialize(TreeNode root) {
        if (root == null) return "";
        StringBuilder sb = new StringBuilder();
        preOrder(root,sb);
        return sb.toString();
    }

    private void preOrder(TreeNode node, StringBuilder sb) {
        if (node == null) {
            sb.append("#,");
            return;
        }
        sb.append(node.val).append(",");
        preOrder(node.left,sb);
        preOrder(node.right,sb);

    }

    TreeNode Deserialize(String str) {
        if (str.isEmpty()) return null;
        String[] seq = str.split(",");
        return reConstruct(seq);
    }

    private TreeNode reConstruct(String[] seq) {

        ++index;
        if (seq[index].equals("#") || index >= seq.length) return null;

        TreeNode root = new TreeNode(Integer.parseInt(seq[index]));
        root.left = reConstruct(seq);
        root.right = reConstruct(seq);

        return root;
    }

相关文章

  • LeetCode:序列化二叉树

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

  • 数据结构算法(九) 之 树的 2 道面试题 62 & 6

    剑指 Offer 面试题 62(Java 版):序列化二叉树 题目:请实现两个函数,分别用来序列化和反序列化二叉树...

  • 37:序列化二叉树

    题目37:序列化二叉树 请实现两个函数,分别用来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件...

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

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

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

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

  • 二叉树的三种遍历方法

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

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

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

  • JZ-061-序列化二叉树

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

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

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

  • 剑指offer 38- 序列化二叉树

    请实现两个函数,分别用来序列化和反序列化二叉树。 您需要确保二叉树可以序列化为字符串,并且可以将此字符串反序列化为...

网友评论

      本文标题:面试题37:序列化和反序列化二叉树

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