Given the root of a binary tree, return the number of uni-value subtrees.
A subtree of treeName is a tree consisting of a node in treeName and all of its descendants.
A uni-value subtree means all nodes of the subtree have the same value.
Example 1:
Input: root = [5,1,5,5,5,null,5]
Output: 4Example 2:
Input: root = []
Output: 0Example 3:
Input: root = [5,5,5,5,5,null,5]
Output: 6Constraints:
[0, 1000].-1000 <= Node.val <= 1000class Solution:
def countUnivalSubtrees(self, root: Optional[TreeNode]) -> int:
self.count = 0
def dfs(node):
if node is None:
return True
isLeftUniValue = dfs(node.left)
isRightUniValue = dfs(node.right)
# If both the children form uni-value subtrees, we compare the value of
# chidrens node with the node value.
if isLeftUniValue and isRightUniValue:
if node.left and node.val != node.left.val:
return False
if node.right and node.val != node.right.val:
return False
self.count += 1
return True
# Else if any of the child does not form a uni-value subtree, the subtree
# rooted at node cannot be a uni-value subtree.
return False
dfs(root)
return self.countWhere is the number of nodes in the given binary tree
class Solution:
def countUnivalSubtrees(self, root: Optional[TreeNode]) -> int:
def dfs(node, count):
if node is None:
return True
isLeftUniValue = dfs(node.left, count)
isRightUniValue = dfs(node.right, count)
# If both the children form uni-value subtrees, we compare the value of
# chidrens node with the node value.
if isLeftUniValue and isRightUniValue:
if node.left and node.val != node.left.val:
return False
if node.right and node.val != node.right.val:
return False
count[0] += 1
return True
# Else if any of the child does not form a uni-value subtree, the subtree
# rooted at node cannot be a uni-value subtree.
return False
count = [0]
dfs(root, count)
return count[0]Where is the number of nodes in the given binary tree