1. 程式人生 > >【leetcode 968. 監控二叉樹】解題報告[待完善...]

【leetcode 968. 監控二叉樹】解題報告[待完善...]

由於 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. 監控二叉樹】解題報告[待完善...]