zoukankan      html  css  js  c++  java
  • 剑指offer系列35----序列化二叉树

    【题目】

    * 请实现两个函数,分别用来序列化和反序列化二叉树
    * 1
    /
    2 3
    / /
    4 5 6 7
    *
    * 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。
    * 而反序列化的结果则是输出一棵二叉树。

     1 package com.exe7.offer;
     2 
     3 /**
     4  * 请实现两个函数,分别用来序列化和反序列化二叉树
     5  * 1
     6   / 
     7  2    3
     8  /    /
     9 4  5   6  7
    10  *                 
    11  * 序列化的结果是1,2,#,#,3,4,#,7,#,#,5,#,#,。
    12  * 而反序列化的结果则是输出一棵二叉树。        
    13  * @author WGS
    14  *
    15  */
    16 public class SerializeBiTree {
    17     static class TreeNode{
    18         int val=0;
    19         TreeNode left=null;
    20         TreeNode right=null;
    21         TreeNode next=null;
    22         public TreeNode(int val){
    23             this.val=val;
    24         }
    25     }
    26     
    27     //序列化  前序
    28     public String serialize(TreeNode pRoot){
    29         
    30         StringBuilder sb=new StringBuilder();
    31         if(pRoot==null){
    32             sb.append("#,");
    33             return sb.toString();
    34         }
    35         sb.append(pRoot.val+",");
    36         sb.append(serialize(pRoot.left));
    37         sb.append(serialize(pRoot.right));
    38         return sb.toString();
    39         
    40     }
    41     //反序列化 相当于创建二叉树的过程
    42     int p=-1;
    43     public TreeNode deSerialize(String strIn){
    44         p++;
    45         if(p>strIn.length())
    46             return null;
    47         String[] strArr=strIn.split(",");
    48         TreeNode node=null;
    49         if(!strArr[p].equals("#")){
    50             node=new TreeNode(Integer.valueOf(strArr[p]));
    51             node.left=deSerialize(strIn);
    52             node.right=deSerialize(strIn);
    53         }
    54         return node;
    55         
    56     }
    57     public void preOrder(TreeNode node){
    58         if(node==null) return;
    59         System.out.print(node.val+"  ");
    60         preOrder(node.left);
    61         preOrder(node.right);
    62     }
    63     public static void main(String[] args) {
    64         SerializeBiTree s=new SerializeBiTree();
    65         
    66         //反序列化
    67         String strIn=("1,2,#,#,3,4,#,7,#,#,5,#,#,");
    68         TreeNode tempNode=s.deSerialize(strIn);
    69         s.preOrder(tempNode);//前序遍历
    70         
    71         System.out.println("------------------------");
    72         //序列化  结果: 1,2,4,#,#,5,#,#,3,6,#,#,7,#,#,
    73 /*
    74            1
    75           / 
    76          2    3
    77         /    /
    78        4  5   6  7
    79  * */
    80         TreeNode root=new TreeNode(1);
    81         TreeNode node1=new TreeNode(2);
    82         TreeNode node2=new TreeNode(3);
    83         TreeNode node3=new TreeNode(4);
    84         TreeNode node4=new TreeNode(5);
    85         TreeNode node5=new TreeNode(6);
    86         TreeNode node6=new TreeNode(7);
    87         root.left=node1;//2
    88         root.right=node2;//3
    89         node1.left=node3;//4
    90         node1.right=node4;//5
    91         node2.left=node5;//6
    92         node2.right=node6;//7
    93         
    94         String str=s.serialize(root);
    95         System.out.println(str);
    96     }
    97 
    98 }
  • 相关阅读:
    fiddler查看IP地址和请求响应时间
    web安全测试排查
    搞站思路 <陆续完善中>
    sys模块进度条玩法笔记
    Webbench、ab命令:做压力测试的工具和性能的监控工具
    xlwings excel(三)
    xlwings excel(二)
    xlwings excel(一)
    xlwings API Documentation
    Python+Excel 操作对比
  • 原文地址:https://www.cnblogs.com/noaman/p/5587224.html
Copyright © 2011-2022 走看看