zoukankan      html  css  js  c++  java
  • 剑指offer 61.序列化二叉树

    剑指offer 61.序列化二叉树

    题目

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

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

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

    思路

    这题其实可以面向答案编程,直接设一个root返回就行了,牛客不检查那个字符串。
    正规做法还是递归,中左右前序,直接就行了。

    代码

      public class TreeNode {
    
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
          this.val = val;
        }
      }
    
      int index;
      String Serialize(TreeNode root) {
    
        StringBuffer sb = new StringBuffer();
        if(root == null){
          sb.append("#,");
          return sb.toString();
        }
        sb.append(root.val+",");
        sb.append(Serialize(root.left));
        sb.append(Serialize(root.right));
        return sb.toString();
      }
      TreeNode Deserialize(String str) {
        
        if(str == null){
          return null;
        }
        index = -1;
        String[] strSeg = str.split(",");
    
        return DeserializeStr(strSeg);
    
      }
    
      public TreeNode DeserializeStr(String[] strSeg){
        index++;
        TreeNode treeNode = null;
        if(!strSeg[index].equals("#")){
          treeNode = new TreeNode(Integer.valueOf(strSeg[index]));
          treeNode.left = DeserializeStr(strSeg);
          treeNode.right = DeserializeStr(strSeg);
        }
        return treeNode;
      }
    
  • 相关阅读:
    iOS使用第三方管理工具
    Mysql忘记密码怎么办
    支付宝支付流程
    关于iOS9 HTTP不能正常使用的解决方法
    ios项目开发汇总
    sqlite3
    Drupal 7.31版本爆严重SQL注入漏洞
    Google发布SSLv3漏洞简要分析报告
    Linux“Bash”漏洞大爆发
    Discuz 5.x/6.x/7.x投票SQL注入分析
  • 原文地址:https://www.cnblogs.com/blogxjc/p/12426385.html
Copyright © 2011-2022 走看看