【leetcode 968. 監控二叉樹】解題報告[待完善...]
阿新 • • 發佈:2019-05-02
由於 camera 需要 spa alt img 狀態 數量 turn
方法一:遞歸
// 0:該節點安裝了監視器 1:該節點可觀,但沒有安裝監視器 2:該節點不可觀 int monitor = 0; int state(TreeNode* node) { if (node == nullptr) return 1; int left = state(node->left); int right = state(node->right); // 該節點為0的情況 if (left == 2 || right == 2) { monitor++; // 由於左或右節點不可觀,則需要給當前節點安裝監視器,為0狀態 return 0; } // 為1的情況 else if (left == 0 || right == 0) return 1; // 由於左或右節點安裝了監視器,當前節點就不需要安裝監視器也可觀了,為1狀態 // 為2的情況 else // 其他:即為left==1&&right==1,左右節點都可觀,但沒有監視器,當前節點不可觀,為2狀態 return 2; }int minCameraCover(TreeNode *root) { if (root == nullptr) return 0; if (state(root) == 2) monitor++; // 如果這個節點為2的狀態,需要加一個監視器 return monitor; }
解題思路: 由於葉子節點一定不要安裝監視器,這樣才能使總監視器數量比較少,因此需要從下往上進行判斷當前節點的狀態(共:3種狀態):
- 0: 當前節點安裝了監視器
- 1: 當前節點可觀,但沒有安裝監視器
- 2: 當前節點不可觀
對於葉子節點,我們認為不可觀
【leetcode 968. 監控二叉樹】解題報告[待完善...]