演算法學習 監控二叉樹

2021-10-06 13:09:44 字數 1377 閱讀 6134

給定乙個二叉樹,我們在樹的節點上安裝攝像頭。

節點上的每個攝影頭都可以監視其父物件、自身及其直接子物件。

計算監控樹的所有節點所需的最小攝像頭數量。

從題目中知道,我們需要求得最小攝像頭數量

那麼怎麼樣去保證最小

我們來用乙個節點的不需安裝攝像頭的情況列舉一下

當此節點的左右子節點,乙個節點為已監視狀態,乙個節點為已安裝狀態,不需安裝攝像頭

當此節點的左右子節點均為已安裝狀態,不需安裝攝像頭

當此節點的左右子節點均為,不需安裝攝像頭

當此節點的左右子節點均為已監視狀態,不需安裝攝像頭

對於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是按每層依次編號,即層次遍歷。因為層次遍歷的方法也有很多,所以序列化方法...