剑指offer——序列化二叉树

序列化二叉树

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

在序列化二叉树时,可以使用二叉树遍历的递归版本,也可以使用迭代版本,而且先序遍历,中序遍历,后序遍历和层序遍历都可以实现,但是在进行反序列化时,本来用二叉树中序遍历实现的序列化,不会反序列化回来,可能是我功力不够吧,现在只会先序遍历的反序列化

目前知道到的有先序遍历层序遍历两种实现方案

import java.util.Queue;
import java.util.LinkedList;
/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
public class Solution {
    String Serialize(TreeNode root) {
        if(root == null) return "#_";

        String str = root.val + "_";
        str += Serialize(root.left);
        str += Serialize(root.right);
        return str;
    }
    TreeNode Deserialize(String str) {
        if(str == null || str.length() == 0) return null;
        String[] strs = str.split( "_" );
        Queue<String> queue = new LinkedList<>();
        for(int i = 0; i < strs.length; i++){
            queue.offer( strs[i] );
        }
        return reConstructTree(queue);
    }

    TreeNode reConstructTree(Queue<String> queue) {
        String str = queue.poll();
        if("#".equals(str)) {
            return null;
        }
        TreeNode node = new TreeNode(Integer.valueOf(str));
        node.left = reConstructTree( queue);
        node.right = reConstructTree( queue);
        return node;
    }
}

  

原文地址:https://www.cnblogs.com/SkyeAngel/p/9019663.html