temp.append(“# “);此句中#号后面的空格不可丢,不然报错Runtime。因为无法分清二叉树中null节点和其他非空节点。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
import java.util.StringTokenizer;
public class Codec {
// Encodes a tree to a single string.
public String serialize(TreeNode root) {
StringBuilder temp = new StringBuilder();
serialize(root,temp);
return temp.toString();
}
private void serialize(TreeNode root,StringBuilder temp){
if(root ==null){
temp.append("# ");
}else{
temp.append(root.val+" ");
serialize(root.left,temp);
serialize(root.right,temp);
}
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if(data==null || data.length()==0){
return null;
}
StringTokenizer st = new StringTokenizer(data);
return deserialize(st);
}
private TreeNode deserialize(StringTokenizer st){
if(!st.hasMoreTokens()){
return null;
}
String s = st.nextToken();
if(s.equals("#"))return null;
TreeNode root = new TreeNode(Integer.valueOf(s));
root.left = deserialize(st);
root.right = deserialize(st);
return root;
}
}
// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));