LeetCode 968 監控二叉樹

2021-10-09 16:29:55 字數 898 閱讀 2847

思路:貪心/樹狀dp

1.貪心:對於樹來說,監控父節點一定不監控子節點覆蓋的點多,因此只要從葉子節點處貪心,同時記錄當前節點的狀態即可,節點的有三種狀態:0-節點未被覆蓋、1-節點被覆蓋但不是監控點、2-節點為覆蓋點

2.樹狀dp:節點同樣是這三種狀態,dp[i][j]為子樹 i 為 j 狀態時被覆蓋所需要監控節點的最小數量

再對父節點的左右節點是否存在分類討論即可

code 1:

//貪心 

class solution

int find(treenode* root)

int s1=find(root->left);

int s2=find(root->right);

int res=0;

if(!s1||!s2)else if(s1==1&&s2==1)else

return res;}};

code 2:

//樹狀dp 

class solution

root->val=++tmp;

mincameracover(root->left);

mincameracover(root->right);

int l,r,u=root->val;

if(root->left!=null&&root->right!=null)else if(root->left!=null)else if(root->right!=null)else

return min(dp[u][1],dp[u][2]);}};

leetcode 968 監控二叉樹

給定乙個二叉樹,我們在樹的節點上安裝攝像頭。節點上的每個攝影頭都可以監視其父物件 自身及其直接子物件。考慮給乙個節點是否安裝camera,有以下幾種考慮方式 1.若考慮的是根節點,該節點可以由自身 左孩子 右孩子安裝camera來覆蓋 2.若考慮的是樹中某個節點,該節點可以由自身 左孩子 右孩子 父...

leetcode 968 監控二叉樹

題目鏈結 給定乙個二叉樹,我們在樹的節點上安裝攝像頭。節點上的每個攝影頭都可以監視其父物件 自身及其直接子物件。計算監控樹的所有節點所需的最小攝像頭數量。不會做。definition for a binary tree node.struct treenode class solution 0 不可...

LeetCode 968 監控二叉樹(DFS)

給定乙個二叉樹,我們在樹的節點上安裝攝像頭。節點上的每個攝影頭都可以監視其父物件 自身及其直接子物件。計算監控樹的所有節點所需的最小攝像頭數量。示例 1 輸入 0,0,null,0,0 輸出 1 解釋 如圖所示,一台攝像頭足以監控所有節點。示例 2 輸入 0,0,null,0,null,0,null...