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记录递归过程中的下标。

  • 相关阅读:
    设计模式之策略模式
    UML类图几种关系的总结
    LinuxMint下安装使用Umbrello(UML工具)
    Linux环境变量
    随笔
    Unity Animation Scripting zz
    FSM:游戏开发中的有限状态机(理论篇)转
    统计帧率的几种方法
    图形学 游戏 学习链接汇总
    福尔摩斯女友
  • 原文地址:https://www.cnblogs.com/ustca/p/12761473.html
Copyright © 2011-2022 走看看