这道题似乎有点争议,我的解决方案卡在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://www.cnblogs.com/asenyang/p/10994654.html