小学生都能看懂的题解 | #序列化二叉树#

序列化二叉树

https://www.nowcoder.com/practice/cf7e25aa97c04cc1a68c8f040e71fb84

序列化:把树变成一串数字和符号

想象一下,我们有一棵圣诞树,上面挂了很多装饰品。我们要记录这棵树的样子,以便以后可以完全复制出来。这里有一个办法:

  1. 先看树顶
  2. 我们首先写下树顶(根节点)的装饰品编号。
  3. 再看左边的小树枝
  4. 然后看看树顶左边的第一个小树枝(左子树),如果有的话,也记下它的装饰品编号。
  5. 如果没有,我们就写一个“#”。
  6. 接着看右边的小树枝
  7. 再看看树顶右边的第一个小树枝(右子树),如果有的话,同样记下它的装饰品编号。
  8. 如果没有,还是写一个“#”。

然后,对于每个小树枝,我们重复以上三个步骤,直到所有的树枝都被记录下来为止。每次记完一个小树枝的信息后,我们在下一个信息前面加上一个空格。

反序列化:把一串数字和符号变成树

现在我们有了这样一串数字和符号,我们要用它来重建那棵圣诞树:

  1. 取出第一个数字
  2. 这个数字代表了树顶(根节点)的装饰品编号。
  3. 取出下一个数字或符号
  4. 如果是数字,那么它代表了树顶左边第一个小树枝(左子树)的装饰品编号;
  5. 如果是“#”,那就表示左边没有小树枝。
  6. 再取出下一个数字或符号
  7. 这次是看树顶右边第一个小树枝(右子树)。
  8. 如果是数字,就给右边挂上相应编号的装饰品;如果是“#”,就不挂。

然后,对于每个新挂上的小树枝,我们重复以上三个步骤,直到所有的信息都用完了为止。

下面是简单的代码:

import java.util.*;

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 "#";
        return root.val + " " + serialize(root.left) + " " + serialize(root.right);
    }

    // 反序列化
    public TreeNode deserialize(String data) {
        Queue<String> queue = new LinkedList<>(Arrays.asList(data.split(" ")));
        return deserializeHelper(queue);
    }

    private TreeNode deserializeHelper(Queue<String> queue) {
        String val = queue.poll();
        if ("#".equals(val)) return null;
        TreeNode node = new TreeNode(Integer.parseInt(val));
        node.left = deserializeHelper(queue);
        node.right = deserializeHelper(queue);
        return node;
    }
}

如果这篇文章对你有帮助,请点个免费的赞👍,让它能够帮助更多的人。

#牛客创作赏金赛#
小学生都能看懂的算法 文章被收录于专栏

主要面向小白的算法文章。以小学生都能看懂为目标而编写,顺便巩固下自己。

全部评论

相关推荐

11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
Noel_:中石油是这样的 哥们侥幸混进免笔试名单 一看给我吓尿了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务