前往
大廳
主題

LeetCode - 1026. Maximum Difference Between Node and Ancestor 解題心得

Not In My Back Yard | 2022-06-24 12:00:01 | 巴幣 0 | 人氣 158

題目連結:


題目意譯:
給定一個二元樹的根節點 root,找到最大值 v 使得存在節點 a 、 b 其中 v = |a.val - b.val| 且 a 為 b 的一個祖先。

一節點 a 為 b 的一個祖先,如果以下條件之一符合:a 的某一小孩為 b,或是 a 的任一小孩為 b 的祖先。

限制:
樹中的節點數量位於範圍 [2, 5000] 中。
0 ≦ Node.val ≦ 10 ^ 5



範例測資:
範例 1:
輸入: root = [8,3,10,1,6,null,14,null,null,4,7,13]
輸出: 7
解釋: 我們有多個祖先-一般節點(Ancestor-Node)之差值,其中幾個給定於下方:
|8 - 3| = 5
|3 - 7| = 4
|8 - 1| = 7
|10 - 13| = 3
在所有可能的差值中,最大值為 7,其由 |8 - 1| = 7 得來。

範例 2:
輸入: root = [1,null,2,null,0,3]
輸出: 3


解題思維:
窮舉所有可能的祖先-一般節點之關係即可,也就是利用深度優先搜尋(Depth First Search,DFS)來從根節點走到葉節點。

過程中,我們維護當前路徑上的最小值以及最大值。碰到葉節點的時候計算這條根節點到葉節點上的路徑之最大值與最小值之差值,即可以一口氣知道這條路徑上所有祖先-一般節點之差值中最大的。

而所有路徑中差值最大的即為所求。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作