1448-Count Good Nodes in Binary Tree
Leetcode 75-day challenge
So, the problem I chose for today is: Count Good Nodes in Binary Tree
Before I start explaining the solution to this problem, I assume that the reader of this blog has a basic understanding of how Binary Search Trees (BST) work. If not, you can watch my YouTube video on the topic here:
Let’s start:
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.
Return the number of good nodes in the binary tree.
Example 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.
Node 4 -> (3,4) is the maximum value in the path starting from the root.
Node 5 -> (3,4,5) is the maximum value in the path
Node 3 -> (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
[-10^4, 10^4]
.
Solution:
Here’s a step-by-step explanation:
res
is a class-level variable used to keep track of the count of good nodes.- The
goodNodes
method is the entry point for counting good nodes in the tree. It initializes the counting process by calling thegetGoodNodes
method with the root of the tree and the minimum integer value as the starting maximum. - The
getGoodNodes
method is a recursive function that traverses the binary tree in a depth-first manner. - At each node, it checks if the current node’s value is greater than or equal to the maximum value found in the path from the root to that node. If so, it updates the maximum value and increments the count of good nodes (
res
). - Then, it recursively calls
getGoodNodes
on the left and right subtrees, passing the updated maximum value. - The count of good nodes (
res
) is finally returned from thegoodNodes
method.
And you can find the GitHub gist here
I hope I was able to explain the solution and it’ll help and motivate you to start the challenge as well.
For more coding examples check out these blogs: