题目:
思路:
①序列化:前序遍历的方法递归走完整棵树,输出字符串即可
②反序列化:对字符串进行spilt()处理,前序遍历的话首位元素为根节点,这个节点用完就从字符串数组里删除,然后递归画出整棵树
代码:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Codec {
// 序列化
public String serialize(TreeNode root) {
if(root == null)
return "Null";
String ans = root.val + "," + serialize(root.left) + "," + serialize(root.right);//前序遍历——————递归
return ans;
}
// 反序列化
public TreeNode rdeserialize(List<String> data) {
if (data.get(0).equals("Null")) {//空节点
data.remove(0);
return null;
}
TreeNode root = new TreeNode(Integer.valueOf(data.get(0)));
data.remove(0);
//递归
root.left = rdeserialize(data);
root.right = rdeserialize(data);
return root;
}
public TreeNode deserialize(String data) {
String[] data_array = data.split(",");
List<String> data_list = new LinkedList<String>(Arrays.asList(data_array));
return rdeserialize(data_list);
}
}
// 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));
复杂度分析:
①时间复杂度:O(n)
②空间复杂度:O(n)