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;
      }
    
  • 相关阅读:
    2019-1-17水晶报表函数大全
    2019-1-17【水晶报表内功心法】--推拉之间
    2019-1-17水晶报表技巧总结【二】
    2019-1-16 水晶报表自动补空行
    2019-1-16水晶报表技巧总结【一】
    博客园添加访客人数
    2019-1-11存储过程的查看
    2019-1-11数据库重构
    lcx端口转发 linux版
    PentesterLab-From SQL Injection to Shell: PostgreSQL edition
  • 原文地址:https://www.cnblogs.com/blogxjc/p/12426385.html
Copyright © 2011-2022 走看看