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

 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 import java.lang.StringBuilder;
15 //序列化 思路:
16 // 先序遍历 节点不为空时存入val,  节点为空时 存入#,
17 //加入逗号的目的  是为了拆分方便
18 public class Solution {
19         StringBuilder bulider=new StringBuilder();      
20         int index=-1;//字符数组指针  
21         String Serialize(TreeNode root) {
22            if(root==null) return bulider.append("#,").toString();                 
23              bulider.append(root.val+",");
24              Serialize(root.left);
25              Serialize(root.right); 
26             return bulider.toString();
27           }
28     //反序列化 把字符串拆分为字符数组 只要不为#就是前一节点的左子节点
29     //遇到# 就回溯为上一节点的右子节点
30     //建立二叉树的规则 是 根左右
31     TreeNode Deserialize(String str){    
32         String[]strlist=str.split(",");
33         return Mydeserizlize(strlist);
34        }
35     
36      TreeNode Mydeserizlize(String[] strlist){
37         index++;
38         TreeNode root=null;//递归时每次都要新建新节点   不能把root作为全局变量  
39        if(!strlist[index].equals("#")){
40            root=new TreeNode(Integer.valueOf(strlist[index]));
41            root.left=Mydeserizlize(strlist);
42            root.right=Mydeserizlize(strlist);
43        }
44          return root;
45     }
46       
47   }

 

posted @ 2018-03-13 14:10  薄凉古风  阅读(879)  评论(0编辑  收藏  举报