力扣199場比賽 5474 好葉子節點對的數量

2021-10-08 13:27:21 字數 2168 閱讀 2488

給你二叉樹的根節點 root 和乙個整數 distance 。

如果二叉樹中兩個 葉 節點之間的 最短路徑長度 小於或者等於 distance ,那它們就可以構成一組 好葉子節點對 。

返回樹中 好葉子節點對的數量 。

示例 1:

輸入:root = [1,2,3,null,4], distance = 3

輸出:1

解釋:樹的葉節點是 3 和 4 ,它們之間的最短路徑的長度是 3 。這是唯一的好葉子節點對。

示例 2:

輸入:root = [1,2,3,4,5,6,7], distance = 3

輸出:2

解釋:好葉子節點對為 [4,5] 和 [6,7] ,最短路徑長度都是 2 。但是葉子節點對 [4,6] 不滿足要求,因為它們之間的最短路徑長度為 4 。

示例 3:

輸入:root = [7,1,4,6,null,5,3,null,null,null,null,null,2], distance = 3

輸出:1

解釋:唯一的好葉子節點對是 [2,5] 。

示例 4:

輸入:root = [100], distance = 1

輸出:0

示例 5:

輸入:root = [1,1,1], distance = 2

輸出:1

tree 的節點數在 [1, 2^10] 範圍內。

每個節點的值都在 [1, 100] 之間。

1 <= distance <= 10

這道題主要把握兩點:

判斷當前節點為葉子節點

計算任意兩個葉子節點之間的路徑距離,並計算符合要求路徑的對數

判斷是否是葉子節點很簡單,難點是如何求葉子節點之間的距離?

對於二叉樹,我們可以使用佇列進行廣度優先遍歷,同時每個節點都有對應的唯一的路徑,仿照哈夫曼編碼,對於當前節點到左結點路徑使用0記錄,到右結點路徑使用1記錄,這樣可以做到每條路徑唯一,如果兩個節點(n層)共父親節點,其對應的路徑字首一定有n-1個相等,如果兩個節點間的路徑長度,可以轉化成兩個節點分別到第乙個公共祖父節點的路徑之和,也就是說可以比較路徑編碼來判斷其第乙個公共祖父節點位置。即最後乙個編碼相同的節點即其第乙個公共祖父節點。

如上圖所示:

葉子節點4的路徑」00「,節點5的路徑為」01「,節點6的路徑為」10「

,節點7的路徑為」11「,那麼葉子節點4和5之間的距離可以這麼計算:4的路徑長度+5的路徑長度-2*(4和5節點路徑的字首相同的長度) =》2 + 2 - 2*(1) = 2;括號中的1是00和01的字首有相同的0,程度為1

葉子節點4和6之間的距離:2+2-2*(0)=4,00和10沒有相同的字首。

同理可以計算節點5和6的距離是4,節點6和7之間的距離是2。

最後統計滿足條件的對數即可。

/**

* definition for a binary tree node.

* struct treenode

* treenode(int x) : val(x), left(nullptr), right(nullptr) {}

* treenode(int x, treenode *left, treenode *right) : val(x), left(left), right(right) {}

* };

*/typedef treenode t;

class

solution

if(node-

>right!=

nullptr)}

int ans =0;

for(

int i =

0; i <

int(trees.

size()

); i++)if

(d <= distance)

ans++;}

}return ans;}}

;

力扣199場比賽 5473 燈泡開關 IV

房間中有 n 個燈泡,編號從 0 到 n 1 自左向右排成一行。最開始的時候,所有的燈泡都是 關 著的。請你設法使得燈泡的開關狀態和 target 描述的狀態一致,其中 target i 等於 1 第 i 個燈泡是開著的,等於 0 意味著第 i 個燈是關著的。有乙個開關可以用於翻轉燈泡的狀態,翻轉操...

第 199 場力扣周賽題解

5472.重新排列字串 思路 額外開乙個字元陣列儲存以及完成題目要求的移動即可。class solution 5473.燈泡開關 iv 思路 一定是從左到右翻轉的,若當前燈是開著的,判斷它之前翻轉了幾次,若是偶數次,則當前仍需要執行翻轉操作,對於關著的燈也是一樣的。class solution re...

力扣 棒球比賽

你現在是棒球比賽記錄員。給定乙個字串列表,每個字串可以是以下四種型別之一 1.整數 一輪的得分 直接表示您在本輪中獲得的積分數。2.一輪的得分 表示本輪獲得的得分是前兩輪有效回合得分的總和。3.d 一輪的得分 表示本輪獲得的得分是前一輪有效回合得分的兩倍。4.c 乙個操作,這不是乙個回合的分數 表示...