查看: 680| 回复: 2
跳转到指定楼层
上一主题 下一主题
收起左侧

[树/链表/图] 297. Serialize and Deserialize Binary Tree 关于树中的None问题。。。。。。。。。

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 ATPtennis 于 2021-9-4 14:23 编辑

Python.
想问的是,下面代码第一部分序列化后,输出的是"1 2 # # 3 4 # # 5 # #",可是例子里,这个数的结构是[1,2,3,null,null,4,5],正常的话序列化后应该是"1 2 # # 3 4 5"。可是下面代码运行也成功了,请问问题出在哪呢?序列化后的字符串里面,None是可以随便放吗?

class Codec:
    def serialize(self, root):
        def doit(node):
            if node:
                vals.append(str(node.val))
                doit(node.left)
                doit(node.right)
            else:
                vals.append('#')
        vals = []
        doit(root)
        return ' '.join(vals)

    def deserialize(self, data):
        def doit():
            val = next(vals)
            if val == '#':
                return None
            node = TreeNode(int(val))
            node.left = doit()
            node.right = doit()
            return node
        vals = iter(data.split())
        return doit()




上一篇:如何写出bugfree代码(关于编码风格
下一篇:652. Find Duplicate Subtrees 代码有漏洞但依然提交成功,是否蕴含隐藏条件????
🔗
wchen329 2021-9-5 02:14:00 | 只看该作者
全局:
不是none 可以随便放,而是你要知道你是怎么放的。就好像收拾东西的时候,哪个柜子放什么你自己决定,你能记住然后下次准确找到就好。

你用的是 dfs preorder的方法,所以3 visit 完去4,(竖着)visit完4的child之后再去5,因此 “1 2 # # 3 4 # # 5 # #"。如果是"1 2 # # 3 4 5" 其实是bfs的traversal, visit完3, 去4, 去5, 再看他们的child。

只要你deserialize和serialize配套就好了
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-9-5 02:30:01 | 只看该作者
全局:
wchen329 发表于 2021-9-4 20:14
不是none 可以随便放,而是你要知道你是怎么放的。就好像收拾东西的时候,哪个柜子放什么你自己决定,你能 ...

好的,明白了,谢谢!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表