我在理解leetcode 250中的解决方案时遇到问题。问题是"给定二进制树,计算uni-value子树的数量。一个uni-value子树是指所有节点的所有节点子树具有相同的值。"问题的链接是https://leetcode.com/problems/count-univalue-subtrees/。
我已经附加了解决方案。我无法理解代码。这线是什么意思?
is_uni = self.is_uni(node.left) and is_uni and node.left.val == node.val
完整解决方案是
class Solution:
def countUnivalSubtrees(self, root):
if root is None: return 0
self.count = 0
self.is_uni(root)
return self.count
def is_uni(self, node):
if node.left is None and node.right is None:
self.count += 1
return True
is_uni = True
if node.left:
is_uni = self.is_uni(node.left) and is_uni and node.left.val == node.val
if node.right:
is_uni = self.is_uni(node.right) and is_uni and node.right.val == node.val
self.count += is_uni
return is_uni
所以您提到的代码行,即
is_uni = self.is_uni(node.left) and is_uni and node.left.val == node.val
此代码行递归调用类成员函数is_uni()
(self.some_member_function()
是python的语法用来访问类的当前实例的成员变量和功能。它与C,C 等的this
语句相似(并且该行的BAISC逻辑是您要检查是否扎根于node.left
的左子树是Uni-Value树,并且is_uni
的值是True
,并且左节点node.left.val
的值与该值相同当前node
正在检查。
现在将重复此逻辑,直到您到达植根于node.left
的左子树的末端为止。类似的逻辑,用于检查扎根于node.right
的右子树是否是Uni-Value树,并且其值node.right.val
与当前的node
相同。启动这两个递归调用,直到检查树的所有节点为止。
希望这会有所帮助!如果您需要进一步澄清,请在评论中告诉我。