当前位置: 代码迷 >> 综合 >> LeetCode 297 Serialize and Deserialize Binary Tree
  详细解决方案

LeetCode 297 Serialize and Deserialize Binary Tree

热度:69   发布时间:2023-10-28 04:04:19.0

思路

Serialize:用arraylist代替queue进行bfs,使用index来完成,把所有节点加入一个arraylist,然后再统一转成字符串(StringBuilder)。注意需要在把所有节点加入arraylist后,进行从后往前的删除null值。
Deserialize: 同样使用一个arraylist,使用一个index来标记当前根节点,同时使用isLeftChild标记当前应该生成左子节点还是右子节点。
注意在使用arraylist的时候应该使用size作为判断条件,因为size一直在增加,这样可以构成合理的循环条件。

复杂度

时间复杂度O(n)
空间复杂度O(n)

代码

/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val = x; }* }*/
public class Codec {
    // Encodes a tree to a single string.public String serialize(TreeNode root) {
    String res = "";if (root == null) {
    return res;}List<TreeNode> queue = new ArrayList<>();queue.add(root);for (int i = 0; i < queue.size(); i++) {
    TreeNode node = queue.get(i);if (node == null) {
    continue;}queue.add(node.left);queue.add(node.right);}while (queue.get(queue.size() - 1) == null) {
    queue.remove(queue.size() - 1);}StringBuilder sb = new StringBuilder();sb.append(queue.get(0).val);for (int i = 1; i < queue.size(); i++) {
    if (queue.get(i) != null) {
    sb.append(",");sb.append(queue.get(i).val);} else {
    sb.append(",#");}}return sb.toString();}// Decodes your encoded data to tree.public TreeNode deserialize(String data) {
    if (data.length() == 0) {
    return null;}String[] value = data.split(",");List<TreeNode> queue = new ArrayList<>();TreeNode root = new TreeNode(Integer.parseInt(value[0]));queue.add(root);int index = 0;boolean isLeftChild = true;for (int i = 1; i < value.length; i++) {
    if (!value[i].equals("#")) {
    TreeNode node = new TreeNode(Integer.parseInt(value[i]));if (isLeftChild) {
    queue.get(index).left = node;} else {
    queue.get(index).right = node;}queue.add(node);}if (!isLeftChild) {
    index++;}isLeftChild = !isLeftChild;}return root;}
}// Your Codec object will be instantiated and called as such:
// Codec codec = new Codec();
// codec.deserialize(codec.serialize(root));
  相关解决方案