1448. Count Good Nodes in Binary Tree
Question: Count Good Nodes in Binary Tree
Solution
思考:
children 只要大於等於所有的 ancestor,就是 Good Node。
因此記下該 path 的最大值 max_val 就好,用 max_val 去與該 node.val 做比較,如果 node.val ≥ max_val 則 node 為 Good Node。
- Top to Bottom → DFS
- 拆分問題成子問題:Good Nodes 的總數 = 自己本身是否為 Good Node + left_sub_tree Good Nodes + right_sub_tree Good Nodes
解法:
- DFS 需要 recursive function,這邊需要把 max_val 傳遞給後面的 node 去做比較,由於原本的 function goodNodes(root) 只能傳遞一個參數,所以需要再寫一個可以傳遞兩個參數的 function: dfs(node, max_val)
- recursive function 的兩個原則:
- 終止條件:
- node 為 None 時,代表 Good Node 為 0: if node == None: return 0
- 判斷條件與呼叫自己
- 如果 node.val 大於 max_val,表示為 Good Node,此時 max_val 也會變成 node.val: if node.val ≥ max_val: max_val = node.val
- 如上述所說 Good Node 的總數 = 自己本身是否為 Good Node + left_sub_tree Good Nodes + right_sub_tree Good Nodes 如果 node.val 大於 max_val: return 1 + dfs(node.left, max_val) + dfs(node.right, max_val) 若否: return 0 + dfs(node.left, max_val) + dfs(node.right, max_val)
- 終止條件:
- return dfs(root, root.val)
# 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 = rightclass Solution:def goodNodes(self, root: TreeNode) -> int:def dfs(node, max_val):if node == None:return 0if node.val >= max_val:max_val = node.valreturn 1 + dfs(node.left, max_val) + dfs(node.right, max_val)return dfs(node.left, max_val) + dfs(node.right, max_val)return dfs(root, root.val)
Comments
Post a Comment