zoukankan      html  css  js  c++  java
  • 剑指Offer61:序列化二叉树(Java)

    参考“春天花卉副校长”的牛客解答:https://www.nowcoder.com/questionTerminal/cf7e25aa97c04cc1a68c8f040e71fb84?f=discussion

    思路分析:

    序列化:序列化好办,遍历一遍连成一个字符串。

    反序列化:不好弄,难在实现父节点与孩子节点的关系。(详见代码中的注释)

    题目描述

    请实现两个函数,分别用来序列化和反序列化二叉树
    二叉树的序列化是指:把一棵二叉树按照某种遍历方式的结果以某种格式保存为字符串,从而使得内存中建立起来的二叉树可以持久保存。序列化可以基于先序、中序、后序、层序的二叉树遍历方式来进行修改,序列化的结果是一个字符串,序列化时通过 某种符号表示空节点(#),以 ! 表示一个结点值的结束(value!)。
    二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。

    Java代码:

    public class Solution {
        int index=0;
        String Serialize(TreeNode root) {
            if(root==null){
                String string="#!";
                return string;
            }
            String str=String.valueOf(root.val)+"!";//这个结点被遍历了  先序遍历
            Serialize(root.left);
            Serialize(root.right);
            return str+Serialize(root.left)+Serialize(root.right);
      }
        /*
        最大的困难时实现父节点与左右孩子之间的关系
        把字符串用结点结束标志切割成字符串数组string,这个字符串每个元素就是二叉树结点的数值,只不过是字符串格式的
        把字符串用结点结束标志切割成字符串数组string,这个字符串每个元素就是二叉树结点的数值,只不过是字符串格式的
        建一个全局变量index当作数组坐标,指向当前数组所指向的字符串(即要插入的结点的数值)。
        index从等于0开始,string[index]若不是“#”,则创建一个二叉树结点node,node的左孩子是刚才过程的递归的结果;
        node的右孩子是node左孩子被赋值后,递归刚才过程得到的。
        每次递归index都会自增一,按顺序拿到ch数组的元素。
        string[index]若是“#”,返回是null的结点。
        */
        TreeNode Deserialize(String str) {
            String []string=str.split("!");
            TreeNode node=null;
            if(!string[index].equals("#")){//String之间的相等与否不能用"=="或"!=",要使用.equal()方法
                node=new TreeNode(Integer.valueOf(string[index++]));
                node.left=Deserialize(str);
                node.right=Deserialize(str);
            }
            else{
                index++;
            }
            
            return node;
      }
    }
    
  • 相关阅读:
    关于AJAX与form表单提交数据的格式
    MongoDB
    Redis
    在django中使用django_debug_toolbar进行日志记录
    python第三方库,你要的这里都有
    Django之用户认证auth模块
    Django中常用命令
    form表单钩子,局部钩子和全局钩子
    当我开始爱自己
    FOR YOU
  • 原文地址:https://www.cnblogs.com/dongmm031/p/12336574.html
Copyright © 2011-2022 走看看