剑指offer—序列化二叉树

来源:互联网 发布:中科院在职研究生知乎 编辑:程序博客网 时间:2024/04/26 00:32

程序小知识:
equals方法对于字符串来说是比较内容的,而对于非字符串来说是比较
其指向的对象是否相同的。
== 比较符也是比较指向的对象是否相同的也就是对象在对内存中的的首地址。
也就是说equals方法和“==”在非字符串对象中的意义相同而在字符串对象中不同,因为字符串重新定义了equals方法

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

public class Solution {    int index = -1;    StringBuilder str = new StringBuilder();    String Serialize(TreeNode root) {        SerializeCore(root);        return String.valueOf(str);  }    void SerializeCore(TreeNode root){        if(root==null) {            str.append("#,");            return;        }        str.append(root.val);        str.append(',');        SerializeCore(root.left);        SerializeCore(root.right);    }    TreeNode Deserialize(String str) {        index++;        int len = str.length();        String[] strr = str.split(",");        if(strr[index].equals("#")) return null;        TreeNode node = new TreeNode(Integer.valueOf(strr[index]));        node.left = Deserialize(str);        node.right = Deserialize(str);        return node;    }}

**思路:
对于序列化:使用前序遍历,递归的将二叉树的值转化为字符,并且在每次二叉树的结点不为空时,在转化val所得的字符之后添加一个’ , ‘作为分割。对于空节点则以 ‘#’ 代替。
2. 对于反序列化:按照前序顺序,递归的使用字符串中的字符创建一个二叉树(特别注意:在递归时,可以设置一个全局变量index来保证每次递归后指向字符串的指针会随着递归的进行而移动!!!)**

原创粉丝点击