1448. Count Good Nodes in Binary Tree
Given a binary tree root, a node X in the tree is named good if in the path from root to X there are no nodes with a value greater than X
TreeExample 1:
- Input:
root = [3,1,4,3,null,1,5] - Output:
4 - Explanation: Nodes in blue are good. Root Node
(3) is always a good node. Node4-> (3,4) is the maximum value in the path starting from theroot. Node5-> (3,4,5) is the maximum value in the path Node3-> (3,1,3) is the maximum value in the path.
Example 2:
- Input:
root = [3,3,null,4,2] - Output:
3 - Explanation: Node
2->(3,3,2) is not good, because"3” is higher than it.
Example 3:
- Input:
root = [1] - Output:
1 - Explanation: Root is considered as good.
Constraints:
- The number of nodes in the binary tree is in the range [1, 10^5].
- Each node’s value is between [-104, 104].
Approach
Solution
# 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 goodNodes(self, root: TreeNode) -> int:
def dfs(node, max_val):
if not node:
return 0
is_good = 1 if node.val >= max_val else 0
new_max = max(max_val, node.val)
return is_good + dfs(node.left, new_max) + dfs(node.right, new_max)
return dfs(root, root.val)