# LeetCode 1448: Count Good Nodes In Binary Tree — Step-by-Step Visual Trace

**Medium** — Binary Tree | Depth-First Search | Recursion | Tree Traversal

## The Problem

Count the number of 'good' nodes in a binary tree, where a node is considered good if there are no nodes with a value greater than it in the path from root to that node.

## Approach

Use depth-first search (DFS) to traverse the tree while keeping track of the maximum value seen along the current path. For each node, check if its value is greater than or equal to the current maximum to determine if it's a good node.

**Time:** O(n) · **Space:** O(h)

## Code

```python
class Solution:
    def goodNodes(self, root: TreeNode) -> int:
        def dfs(node, max_val):
            if not node:
                return 0

            if node.val >= max_val:
                max_val = node.val
                count = 1
            else:
                count = 0

            count += dfs(node.left, max_val)
            count += dfs(node.right, max_val)

            return count

        return dfs(root, float("-inf"))
```

## Watch It Run

> **[Open interactive visualization](https://tracelit.dev/app?trace=1448_count-good-nodes-in-binary-tree)**

> **Try it yourself:** Open [TraceLit](https://tracelit.dev/app?trace=1448_count-good-nodes-in-binary-tree) and step through every line.

---

*Built with [TraceLit](https://tracelit.dev) — the visual algorithm tracer for LeetCode practice.*
