这道题似乎有点争议,我的解决方案卡在111/115上,也有其他人遇到和我的一样的问题。

 1 class Solution:
 2     def Subset(self,root,sums,limit):
 3         if root == None:
 4             return 0
 5         temp = root.val
 6         left = self.Subset(root.left,temp+sums,limit)
 7         right = self.Subset(root.right,temp+sums,limit)
 8         
 9         if root.left != None and root.left.left == None and root.left.right == None and left < limit:
10             root.left = None
11         if root.right != None and root.right.left == None and root.right.right == None and right < limit:
12             root.right = None
13         return temp + sums
14 
15     def sufficientSubset(self, root: TreeNode, limit: int) -> TreeNode:
16         sums = self.Subset(root,0,limit)
17         if root.left == None and root.right == None and sums < limit:
18             return None
19         else:
20             return root

这道题目的主要争议出在:删掉原来的叶子节点之后,新形成的叶子节点,如果不够,是否也要被删除。

我上面的代码,是不会删除这些新叶子节点的。貌似这道题目在比赛期间是使用的和我的代码一样的判断,但是后来又改了。

这道题目描述不清楚,给的例子也不具有代表性,所以很混乱。而leetcode上这类题目其实还蛮多的,至少我是这种感觉。

给出另一种可以AC的解决方案:

1 class Solution:
2     def sufficientSubset(self, root, limit):
3         if root.left == root.right is None:
4             return None if root.val < limit else root
5         if root.left:
6             root.left = self.sufficientSubset(root.left, limit - root.val)
7         if root.right:
8             root.right = self.sufficientSubset(root.right, limit - root.val)
9         return root if root.left or root.right else None

参考:https://leetcode.com/problems/insufficient-nodes-in-root-to-leaf-paths/discuss/308326/JavaC%2B%2BPython-Fixed-Recursion

 

今早看到官方发布了一个声明,对于WA的答案重新判定,算是一种补救措施吧(这道题的AC率也瞬间从不足20%提升到38%,算是比较合理的正确率)

posted on 2019-06-09 20:23  Sempron2800+  阅读(224)  评论(0编辑  收藏  举报