前往
大廳
主題

LeetCode - 538. Convert BST to Greater Tree 解題心得

Not In My Back Yard | 2020-11-28 00:00:05 | 巴幣 102 | 人氣 210

題目連結:


題目意譯:
給定二元搜尋樹(Binary Search Tree,BST)之根節點 root,將其轉換為一棵大於樹(Greater Tree)其滿足原本 BST 的每個節點值變為原本的節點值加上所有 BST 中比該節點值大的節點之值。

作為提醒,一棵二元搜尋樹是一棵樹滿足以下條件:
一個節點的左子樹只包含節點值小於它的節點。
一個節點的右子樹只包含節點值大於它的節點。
左子樹和右子樹也同為二元搜尋樹。


限制:
樹的節點數位於 [0, 10 ^ 4] 這個範圍之中。
-10 ^ 4 ≦ Node.val ≦ 10 ^ 4
樹中所有的值皆相異。
root 指標保證指向著一棵合法的二元搜尋樹。



範例測資:
範例 1:
輸入: root = [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
輸出: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

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

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

範例 4:
輸入: root = [3,2,4,1]
輸出: [7,9,4,10]


解題思維:
這題有提及到,二元搜尋樹作中序探訪會得到一個排序好的數列,在此題因為左子樹皆小於右子樹所以探訪所得的數列為由小到大排好的。

因此,我們可以將中序探訪的順序改為:
右子樹 → 根節點 → 左子樹
探訪後便可以得到一個由大排到小的數列。

接著順著(由大到小)掃過數列然後將每個數字加上前面的數字之總和(尚未更動前的值之總和)即可以將二元搜尋樹轉成一棵大於樹。




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

創作回應

更多創作