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

浙公网安备 33010602011771号