美文网首页
算法(4)二叉树的序列化和反序列化

算法(4)二叉树的序列化和反序列化

作者: 来搞事情 | 来源:发表于2018-09-16 11:47 被阅读0次

1、二叉树序列化
1、 每个节点的值结束后加入 “!” 用来分割,当节点是 null 的时候插入 “#” 返回。

   //node 节点结构
   static class TreeNode {
       int val = 0;
       TreeNode left = null;
       TreeNode right = null;

       public TreeNode(int val) {
           this.val = val;
       }
   }
   /**
     * 序列化,先序遍历
     * @param root
     * @param result
     */
   static void serializable(TreeNode root, StringBuilder result) {
        if (root != null) {
            result.append(root.val).append("!");
            serializable(root.left, result);
            serializable(root.right, result);
        } else {
            result.append("#!");
        }
    }

2、反序列化
1、根据“!” 将字符串分割成string数组
2、递归调用重建二叉树,先根据str[index] 是不是 “#”,判断是否需要新建一个节点,如果不是null,new一个新节点,然后递归调用重建它的左子树,之后是右子树。
3、需要维护一个全局变量来表示string数组当前的偏移位置。

    //
    static int index = 0;
    static TreeNode deserialize(String[] tree) {
        if ("#".equals(tree[index])) {
            index++;
            return null;
        } else {
            TreeNode node = new TreeNode(Integer.parseInt(tree[index++]));
            node.left = deserialize(tree);
            node.right = deserialize(tree);
            return node;
        }
    }

    static void solution(String str) {
        String[] strs = str.split("!");
        TreeNode node = deserialize(strs);
    }
public static void main(String[] args) {
        TreeNode node1 = new TreeNode(1);
        TreeNode node2 = new TreeNode(2);
        TreeNode node3 = new TreeNode(3);
        TreeNode node4 = new TreeNode(4);
        TreeNode node5 = new TreeNode(5);
        TreeNode node6 = new TreeNode(6);
        TreeNode node7 = new TreeNode(7);
        TreeNode node8 = new TreeNode(8);
        node1.left = node2;
        node1.right = node3;
        node2.left = node4;
        node3.left = node5;
        node3.right = node6;
        node5.left = node7;
        node5.right = node8;
        StringBuilder str = new StringBuilder("");
        serializable(node1, str);
        System.out.println(str);
        solution(str.toString());
    }

相关文章

  • 二叉树的三种遍历方法

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

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

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

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

    设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称...

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

    设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称...

  • 2018-01-23 二叉树的序列化反序列化

    设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二叉树被称...

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

    看了左程云老师的算法课,记录学习过程,整理思路和形成系统认识。 题目:二叉树序列化和反序列化(算法课第五课) 二叉...

  • LinkCode 7 二叉树的序列化和反序列化

    描述: 设计一个算法,并编写代码来序列化和反序列化二叉树。将树写入一个文件被称为“序列化”,读取文件后重建同样的二...

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

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

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

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

  • JZ-061-序列化二叉树

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

网友评论

      本文标题:算法(4)二叉树的序列化和反序列化

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