[剑指offer][Java]序列化二叉树

题目

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

程序核心思想

序列化二叉树的意思是选择一种遍历方式,把遍历的结果写成一个字符串,null也要写出来,形式随意。
这里选择先序遍历的方式,来到头节点,头节点的值写成一个字符串,整体的结果是头结点的字符串加上左子树形成的字符串加上右子树形成的字符串,如果当前节点为null,则返回字符串“null”。

反序列化的意思是给定一个字符串,然后把它还原成二叉树。
首先要先把字符串按照一定的分隔符给分开来,把分开的小字符串存入字符串数组中。然后把依次把字符串加入队列,然后出列一个元素,如果这个元素不为null,那么创造一个节点,节点的值为这个元素,然后这个节点的左指针和右指针递归这个过程,如果这个元素为null,那么返回null。

Tips

代码

/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
import java.util.Queue;
import java.util.LinkedList;
public class Solution {
    String Serialize(TreeNode root) {
        if(root == null)    return "null,";
        String s = root.val + ",";
        return s + Serialize(root.left) + Serialize(root.right);
    }

    TreeNode Deserialize(String str) {
       String[] arr = str.split(",");
       Queue queue = new LinkedList();
        for(int i = 0; i < arr.length; i++){
            queue.offer(arr[i]);
        }
        return deserie(queue);
  }
    
    TreeNode deserie(Queue queue){
        String s = queue.poll();
        if(s.equals("null"))    return null;
        TreeNode node = new TreeNode(Integer.valueOf(s));
        node.left = deserie(queue);
        node.right = deserie(queue);
        return node;
    }
}

你可能感兴趣的:([剑指offer][Java]序列化二叉树)