请实现两个函数,分别用来序列化和反序列化二叉树 没什么技巧,使用java实现要方便一点,代码如下:
import java.lang.StringBuilder;
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 "" ;
StringBuilder builder = new StringBuilder();
LinkedList<TreeNode> list = new LinkedList<TreeNode>();
list.push(root);
TreeNode t;
builder.append(root.val);
while (!list.isEmpty ()){
t = list.pop();
if (t.left != null ){
builder.append(" " ).append(t.left .val);
list.push(t.left );
}else {
builder.append(" " ).append("#" );
}
if (t.right != null ){
builder.append(" " ).append(t.right .val);
list.push(t.right );
}else {
builder.append(" " ).append("#" );
}
}
return builder.toString();
}
TreeNode Deserialize(String str) {
if (str.length() == 0 )
return null ;
String [] arr = str.split (" " );
LinkedList<TreeNode> list = new LinkedList<TreeNode>();
if (arr.length == 0 )
return null ;
TreeNode root = new TreeNode(Integer.parseInt(arr[0 ]));
TreeNode t;
list.push(root);
for (int i = 1 ; i < arr.length; ++i){
t = list.pop();
if (!arr[i].equals("#" )){
t.left = new TreeNode(Integer.parseInt(arr[i]));
list.push(t.left );
}
if (!arr[++i].equals("#" )){
t.right = new TreeNode(Integer.parseInt(arr[i]));
list.push(t.right );
}
}
return root;
}
}