序列化二叉树

来源:互联网 发布:js 页面加载后 合计 编辑:程序博客网 时间:2024/06/08 17:18

1.题目描述
请实现两个函数,分别用来序列化和反序列化二叉树
传送门
2.code(java1.7版本)

/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Solution {    public int index=-1;    String Serialize(TreeNode root) {        StringBuffer ans=new StringBuffer();        if(root==null){            ans.append("#,");            return ans.toString();        }        ans.append(root.val+",");        ans.append(Serialize(root.left));        ans.append(Serialize(root.right));        return ans.toString();  }    TreeNode Deserialize(String str) {       index++;        TreeNode node=null;        String[] ch=str.split(",");        if(index>=ch.length)return null;        if(!ch[index].equals("#")){            node=new TreeNode(Integer.valueOf(ch[index]));            node.left=Deserialize(str);            node.right=Deserialize(str);        }        return node;  }}

3.题目分析
根据前序遍历规则完成序列化与反序列化。所谓序列化指的是遍历二叉树为字符串;所谓反序列化指的是依据字符串重新构造成二叉树。依据前序遍历序列来序列化二叉树,因为前序遍历序列是从根结点开始的。当在遍历二叉树时碰到Null指针时,这些Null指针被序列化为一个特殊的字符“#”。另外,结点之间的数值用逗号隔开。