剑指offer_序列化二叉树

题目描述

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

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

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

 

 1 /*
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6 
 7     public TreeNode(int val) {
 8         this.val = val;
 9 
10     }
11 
12 }
13 */
14 public class Solution {
15     String memo = "";
16     String Serialize(TreeNode root) {
17         if(root==null) return "#";
18         return root.val+" "+Serialize(root.left)+" "+Serialize(root.right);
19         
20   }
21     TreeNode Deserialize(String str){
22         memo = str;
23         return Deserialize();
24     }
25     
26     TreeNode Deserialize() {
27         
28         if(memo.length()==0) return null;
29         int index = memo.indexOf(" ");
30         String node = "";
31         if(index==-1)
32         {
33             node=memo;
34             memo = "";
35         }
36         else
37         {
38             node = memo.substring(0,index);
39             memo = memo.substring(index+1);
40         }
41        if (node.equals("#"))    return null;
42        TreeNode root = new TreeNode(Integer.parseInt(node));
43        root.left =Deserialize();
44        root.right = Deserialize();
45        return root;
46   } 
47 }

 

posted @ 2019-09-03 10:52  chyblogs  阅读(155)  评论(0)    收藏  举报