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

[树/链表/图] 652. Find Duplicate Subtrees 代码有漏洞但依然提交成功,是否蕴含隐藏条件????

全局:

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

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

x
下方的代码能够提交成功,但是如果一个树是1234 null null 4,那么下方代码列表中(4, None, None)元组的个数将是2,而很明显,这个树并没有相同的子树。所以这道题实际上蕴含了一个隐藏条件,就是肯定存在相同的子树。这样下方代码执行时,相同子树的元组在字典中的值肯定是>=2的,虽然会多包含不同子树的数量,但是这就够了,因为子树肯定存在。这样理解对吗?

from collections import defaultdict
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def findDuplicateSubtrees(self, root: Optional[TreeNode]) -> List[Optional[TreeNode]]:
        def dfs(root):
            if not root:
                return None
            else:
                left = dfs(root.left)
                right = dfs(root.right)
                tup = root.val, left, right
                dic[tup].append(root)
                return tup
        dic = defaultdict(list)
        dfs(root)
        result = []
        for roots in dic.values():
            if roots[1:]:
                result.append(roots[0])
        return result






补充内容 (2021-09-05 06:00 +8:00):
题目并不蕴含隐藏,因为如果有相同子树,那么最少最少,最下面的两个node要相同。也就是result列表里,最下面那个节点的元组,在字典里的值的列表里,肯定有俩相同值。如果整个树里没有,就返回空列表就完事了。

上一篇:297. Serialize and Deserialize Binary Tree 关于树中的None问题。。。。。。。。。
下一篇:428. Serialize and Deserialize N-ary Tree 反序列化后无法回到原树结构。。。。。。
推荐
 楼主| ATPtennis 2021-9-5 05:11:43 | 只看该作者
全局:
cloudero 发表于 2021-9-4 22:50
没懂,两个4不就是相同子树么。

这个代码,只是通过数量来判断的,如果数量大于等于2了,他就把值放进最终结果里了。但我上面那个树,4的数量也大于等于2了,但不是相同的子树
回复

使用道具 举报

推荐
 楼主| ATPtennis 2021-9-5 05:50:16 | 只看该作者
全局:
cloudero 发表于 2021-9-4 23:48
也对,因为两个3是相同子树

再受累帮我看一下这个帖子的问题,我想了很久不知道哪分析的不对,万分感谢!!
https://www.1point3acres.com/bbs/thread-794507-1-1.html
回复

使用道具 举报

推荐
cloudero 2021-9-5 05:12:38 | 只看该作者
全局:
本帖最后由 cloudero 于 2021-9-4 17:14 编辑
ATPtennis 发表于 2021-9-4 17:09
但是位置不一样,要位置也一样,我第二个4在右子树

题目不是说same structure和same node values嘛,两个4都是没有child的4。没懂你说的位置一样的概念。
回复

使用道具 举报

🔗
cloudero 2021-9-5 04:50:04 | 只看该作者
全局:
没懂,两个4不就是相同子树么。
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-9-5 05:09:37 | 只看该作者
全局:
cloudero 发表于 2021-9-4 22:50
没懂,两个4不就是相同子树么。

但是位置不一样,要位置也一样,我第二个4在右子树
回复

使用道具 举报

🔗
cloudero 2021-9-5 05:13:49 | 只看该作者
全局:
ATPtennis 发表于 2021-9-4 17:11
这个代码,只是通过数量来判断的,如果数量大于等于2了,他就把值放进最终结果里了。但我上面那个树,4的 ...

4是相同的子树呀
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-9-5 05:43:47 | 只看该作者
全局:
cloudero 发表于 2021-9-4 23:13
4是相同的子树呀

啊,你提醒了我一点,我以为必须都是左子树,或者必须都是右子树,一个左,一个右,也行。谢谢!!!!!!!
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-9-5 05:44:38 | 只看该作者
全局:
cloudero 发表于 2021-9-4 23:13
4是相同的子树呀

再举个例子,这个也算对吗[1, 2, 2, 3, null, null, 3]
回复

使用道具 举报

🔗
cloudero 2021-9-5 05:48:22 | 只看该作者
全局:
ATPtennis 发表于 2021-9-4 17:44
再举个例子,这个也算对吗[1, 2, 2, 3, null, null, 3]

也对,因为两个3是相同子树
回复

使用道具 举报

🔗
 楼主| ATPtennis 2021-9-5 05:49:16 | 只看该作者
全局:
cloudero 发表于 2021-9-4 23:48
也对,因为两个3是相同子树

但是2,3一起并不是对吗????????
回复

使用道具 举报

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

本版积分规则

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