java版本:
public class Codec {
int i=0;
int n;
// Encodes a tree to a single string.
StringBuffer str=new StringBuffer("");
ArrayDeque<TreeNode> queue=new ArrayDeque<>();
// 层次遍历这个树
public String serialize(TreeNode root) {
// queue.push(root);
// int size=queue.size();
// while(!queue.isEmpty()){
// size=queue.size();
// for(int i=0;i<size;i++){
// TreeNode node=queue.poll();
// str.append(Integer.toString(node.val));
// str.append(",");
// if(node.left!=null){
// queue.offerLast(node.left);
// }
// if(node.right!=null){
// queue.offerLast(node.right);
// }
// }
// }
// str.deleteCharAt(str.length()-1);
return rserialize(root,"");
}
public String rserialize(TreeNode root,String str){
// if(root==null){
// str.append("null,");
// }else{
// str.append(Integer.toString(root.val));
// str.append(",");
// }
// serialize(root.left);
// serialize(root.right);
if (root == null) {
str += "None,";
} else {
str += str.valueOf(root.val) + ",";
str = rserialize(root.left, str);
str = rserialize(root.right, str);
}
return str;
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
// String[] arr=data.split(",");
// 第一版本
// n=arr.length;
// TreeNode root=new TreeNode();
// root.val=Integer.parseInt(arr[0]);
// i++;
// BFS(root,arr);
// return root;
String[] dataArray = data.split(",");
List<String> dataList = new LinkedList<String>(Arrays.asList(dataArray));
return rdeserialize(dataList);
}
public TreeNode rdeserialize(List<String> dataList) {
if (dataList.get(0).equals("None")) {
dataList.remove(0);
return null;
}
TreeNode root = new TreeNode(Integer.valueOf(dataList.get(0)));
dataList.remove(0);
root.left = rdeserialize(dataList);
root.right = rdeserialize(dataList);
return root;
}
// public TreeNode BFS( TreeNode root,String[] arr){
// TreeNode left=new TreeNode();
// TreeNode right=new TreeNode();
// if(i<n && arr[i]!="null" ){
// left=new TreeNode();
// left.val=Integer.parseInt(arr[i]);
// root.left=left;
// }else{
// // root.left=null;
// }
// i++;
// if(i<n && arr[i]!="null"){
// right=new TreeNode();
// right.val=Integer.parseInt(arr[i]);
// root.right=right;
// }else{
// // root.right=null;
// }
// i++;
// if(root.left!=null){
// BFS(root.left,arr);
// }
// if(root.right!=null){
// BFS(root.right,arr);
// }
// return root;
// }
}
// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// TreeNode ans = deser.deserialize(ser.serialize(root));
网友评论