剑指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; } }