給定乙個二叉樹,我們在樹的節點上安裝攝像頭。
節點上的每個攝影頭都可以監視其父物件、自身及其直接子物件。
計算監控樹的所有節點所需的最小攝像頭數量。
明確每個節點存在的狀態,當前節點只能存在三種狀態,0為未監控,1為已監控,2為安裝攝像頭,後序遍歷樹,先獲得左右節點的狀態資訊,根據左右節點的狀態資訊來設定當前節點的狀態資訊。
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
return res;
}int
dfs(treenode* root)
int left =
dfs(root -
> left)
;int right =
dfs(root -
> right)
;//左右節點至少有乙個未被監控,需要在當前節點設定攝像頭
if(left ==
0|| right ==0)
//左右節點都被監控了,當前節點為未監控狀態
if(left ==
1&& right ==1)
//左右節點至少有乙個安裝了攝像頭,並且有乙個被監控,當前節點處於被監控狀態
//也就是left + right >= 3
return1;
}};
968 監控二叉樹
關於樹的問題我們一般使用遞迴來解決。首先可以遍歷到樹的最底端 此節點的左右孩子都為空,空孩子標記為狀態1 標記此節點為已覆蓋 狀態0 如果乙個節點的其中乙個左右節點狀態為已覆蓋 即還未安裝監視器 那麼給此節點安裝監視器,並且記錄監視器數量的全域性變數自增。安裝監視器後,給節點標記狀態為2,那麼它的父...
968 監控二叉樹
貪心演算法 自底向上,每三層乙個攝像機,就能使得所用的攝像機最少。對最後乙個根節點做特判ans private int ans 0 public intmincameracover treenode root if dfs root 2 return ans 1 該節點沒設定攝像,但被監控。2 該節...
LeetCode 968 監控二叉樹
思路 貪心 樹狀dp 1.貪心 對於樹來說,監控父節點一定不監控子節點覆蓋的點多,因此只要從葉子節點處貪心,同時記錄當前節點的狀態即可,節點的有三種狀態 0 節點未被覆蓋 1 節點被覆蓋但不是監控點 2 節點為覆蓋點 2.樹狀dp 節點同樣是這三種狀態,dp i j 為子樹 i 為 j 狀態時被覆蓋...