【LeetCode-968】監控二叉樹
阿新 • • 發佈:2021-08-28
問題
給定一個二叉樹,我們在樹的節點上安裝攝像頭。
節點上的每個攝影頭都可以監視其父物件、自身及其直接子物件。
計算監控樹的所有節點所需的最小攝像頭數量。
示例
輸入: [0,0,null,0,0]
輸出: 1
解釋: 如圖所示,一臺攝像頭足以監控所有節點。
解答
class Solution { public: int minCameraCover(TreeNode* root) { if (dfs(root) == 2) res++; return res; } private: int res = 0; int dfs(TreeNode* root) { // 0: 監控 1: 被監控 2: 未被監控 if (!root) return 1; int left = dfs(root->left); int right = dfs(root->right); if (left == 2 || right == 2) { // 存在子節點未被監控 res++; return 0; } if (!left || !right) return 1; // 當前根節點已被監控 return 2; } };
重點思路
在遞迴途中,使用三種狀態表示當前根結點:當前節點為監控,當前節點已被監控,當前節點尚未被監控。