給定乙個二叉樹,我們在樹的節點上安裝攝像頭。
節點上的每個攝影頭都可以監視其父物件、自身及其直接子物件。
計算監控樹的所有節點所需的最小攝像頭數量。
從題目中知道,我們需要求得最小攝像頭數量
那麼怎麼樣去保證最小呢
我們來用乙個節點的不需安裝攝像頭的情況列舉一下
當此節點的左右子節點,乙個節點為已監視狀態,乙個節點為已安裝狀態,不需安裝攝像頭
當此節點的左右子節點均為已安裝狀態,不需安裝攝像頭
當此節點的左右子節點均為空,不需安裝攝像頭
當此節點的左右子節點均為已監視狀態,不需安裝攝像頭
對於3、4情況下,不需安裝攝像頭的原因就是,可以交給父節點去安裝,以達到監視此節點的效果
(這裡其實有一些貪心思想)
但是這3、4情況有乙個特例,那就是當此節點為根節點的時候,這兩種情況仍然需要安裝攝像頭
看下圖為了便於記錄
將0標記為未監視
1標記為已監視
2標記為已安裝
圖1:
圖2:我們再來將乙個節點的需要安裝攝像頭的情況列舉一下
當此節點的左右子節點其中乙個為未監視,需要安裝攝像頭
所有情況已經列舉出來,那麼就顯而易見了,將其轉化為**(注釋中已將各個情況處理所在標出)
**如下
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
if(left ==
2|| right ==2)
return1;
//不需安裝情況 1、2
return0;
//不需安裝情況 4
}int
mincameracover
(treenode* root)
};
演算法學習 二叉樹
概念 樹中的元素叫做節點 連線相鄰的節點之間的關係叫父子關係 節點a節點是b節點的父節點,b節點是a節點的子節點。c,d單個節點的父節點是同乙個節點,所以他們互稱為兄弟節點 把沒有父節點的節點叫做根節點 沒有子節點的節點叫做葉子節點或者葉節點 樹節點的高度 節點到葉子節點的最長路徑 邊數 節點的深度...
演算法學習 平衡二叉樹
輸入一棵二叉樹的根節點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意節點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。看到題目,第一時間看到二叉樹的深度定義為 從根節點到葉節點依次經過的節點 含根 葉節點 形成樹的一條路徑,最長路徑的長度為樹的深度。具體可以去看二叉樹的深度 當學會了如何求...
演算法學習 8 二叉樹相關演算法
二叉樹相關演算法是筆試面試常考內容,需重點掌握。二叉樹節點定義 public class treenode 常見二叉樹筆試題如下 1 二叉樹序列化 將二叉樹轉換成string,空節點用特殊字元代替,一般用 表示,而且string是按每層依次編號,即層次遍歷。因為層次遍歷的方法也有很多,所以序列化方法...