欢迎光临散文网 会员登陆 & 注册

【Day18 中高难度算法挑战】二叉树的序列化和反序列化

2023-08-18 13:32 作者:一代鬃狮  | 我要投稿

介绍

总而言之是时候利用暑假锻炼一下算法技术,一提算法面试就面露难色的情形总不能一直持续下去。本栏目面向有一定基础的编程爱好者,每天(如果up不鸽)分享并解析一道LeetCode中高难度题目(通常是hard)。有兴趣的小伙伴可以一起跟着做并且讨论解法。目前的教材是花花酱的Leetcode Problem List【1】.

适合人群:

有一定算法基础,但是还未能顺利通过笔试/面试,总觉得算法题目想不明白的你。

不适合人群:

算法入门级选手(一上来就做难题可能并不合适,建议首先专注简单/中等题目)

非常不适合人群:

算法竞赛选手(这种小儿科的问题完全是在浪费您的时间)

过往题目在这里

二叉树的序列化和反序列化

题目看这里,lintcode第7题,middle难度:
https://www.lintcode.com/problem/7/description/

强烈建议读者自己先做(不过真的会有读者吗,笑),有任何问题欢迎在评论区讨论,up看到了会及时回复。做完了欢迎在评论区打卡~

解析

本题如果做不出来看答案的话,初看很简单,但是实际上有些东西不想明白下次遇到还是不会,这里细节很多。这里序列化的时候我们层序遍历,当子节点存在的时候当然一切好说,但是左/右子节点不存在的话就不要把它加入队列,而为了之后反序列,这里要把‘#’加入结果。

反序列化时先把所有节点创建出来,然后再根据序列化时的顺序逐一连接。连接时我们用了快慢指针的方法,这里可以看做是把层序遍历的顺序再来一遍。

思考乐园

反序列化时快慢指针为什么work?为什么这里单凭一维数组就可以存储树?欢迎将答案写在评论区~

音乐推荐

ttup居然毕业了,令人震惊。不过vtuber这个行业难做也是有目共睹......顺便来说,我也快要毕业,但是不论哪的就业市场都很糟糕,还没有secure一个工作,简历拒也太离谱了,令人非常不安。来自法里达摩登爱情,送给对未来感到迷茫的你。

教材链接

【1】https://zxi.mytechroad.com/blog/leetcode-problem-categories/


【Day18 中高难度算法挑战】二叉树的序列化和反序列化的评论 (共 条)

分享到微博请遵守国家法律