zoukankan      html  css  js  c++  java
  • 序列化二叉树

    题目描述

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

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

    二叉树的反序列化是指:根据某种遍历顺序得到的序列化字符串结果str,重构二叉树。

    思路

    中序遍历二叉树的应用。
    

    时间复杂度O(lgn),空间复杂度O(lgn)。

    代码

    /*
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        int index = -1;
        String[] nodeList = null;
        String Serialize(TreeNode root) {
            if(root == null) {
                return "#!";
            } else {
                return root.val + "!" + Serialize(root.left) + Serialize(root.right);
            }
      }
        TreeNode Deserialize(String str) {
            if(nodeList == null) {
                nodeList = str.split("!");
            }
            index++;
            TreeNode curr = null;
            if(index < nodeList.length) {
                if(!nodeList[index].equals("#")) {
                    curr = new TreeNode(Integer.parseInt(nodeList[index]));
                    curr.left = Deserialize(str);
                    curr.right = Deserialize(str);
                }
            }
            return curr;
      }
    }
    

    笔记

    index记录递归过程中的下标。

  • 相关阅读:
    mysql
    新建mysql容器
    Storm中并行度原来是这样计算的(1.0.1版本)
    集中式系统和分布式系统
    hadoop错误:Does not contain a valid host:port authority
    Linux配置ntp时间服务器(全)
    vi/vim 消除搜索后的关键字高亮
    雄鹰与蜗牛
    如何查看HBase的HFile
    MemoryUsage:监测java虚拟机内存使用
  • 原文地址:https://www.cnblogs.com/ustca/p/12761473.html
Copyright © 2011-2022 走看看