LeetCode筆記:538. Convert BST to Greater Tree

問題(Easy):

Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.

Example:

Input: The root of a Binary Search Tree like this:



Output: The root of a Greater Tree like this:


大意:

給出一個二叉搜索樹(BST),將其轉換為更大樹骇钦,即原本BST中每個節(jié)點值都轉換為其加上樹中所有比它大的節(jié)點值之和绣溜。

例子:

輸入:二叉搜索樹如下:



輸出:更大樹如下:


思路:

題目的意思是節(jié)點中每個值,都把樹中所有比它大的值加起來并加上它自己侮繁,就是它的新值。

這肯定要遍歷整個樹才知道有哪些比一個節(jié)點值大的數(shù)如孝。因為節(jié)點的位置還不能變宪哩,所以只能直接在樹上操作,這里就要用到二叉搜索樹的性質:右大左小第晰。

我們用遍歷锁孟。

對于每個節(jié)點,比它大的節(jié)點有:父節(jié)點茁瘦、父節(jié)點的右子節(jié)點樹上所有節(jié)點品抽、自己的右子節(jié)點、自己的右子節(jié)點樹上所有節(jié)點甜熔。所以我們在計算一個節(jié)點的新值時圆恤,需要把所有這些值都加起來作為自己的新值。

而對于一個節(jié)點的左子節(jié)點腔稀,我們需要將上面算出來的新值給左子節(jié)點盆昙,這樣就是左子節(jié)點的“父節(jié)點及父節(jié)點的右子節(jié)點樹上所有節(jié)點值之和”了羽历。

對于一個節(jié)點的右子節(jié)點,我們需要將“父節(jié)點及父節(jié)點的右子節(jié)點樹上所有節(jié)點值之和”給右子節(jié)點淡喜,因為對于右子節(jié)點秕磷,它父節(jié)點的父節(jié)點,及那個節(jié)點的右子樹炼团,一定都比它大澎嚣。這里和左子節(jié)點給的值其實就不一樣了,需要區(qū)分計算并供給们镜。

這樣我們就可以對每一個節(jié)點進行操作币叹,并組成一個遞歸操作了。

代碼(C++):

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int sumValue(TreeNode* root, int toLeft) {
        int sum = root->val;
        root->val += toLeft;
        if (root->right){
            int rightValue = sumValue(root->right, toLeft);
            root->val += rightValue;
            sum += rightValue;
        }
        if (root->left) {
            int leftValue = sumValue(root->left, root->val);
            sum += leftValue;
        }
        return sum;
    }
    
    TreeNode* convertBST(TreeNode* root) {
        if (!root) return root;
        int temp = sumValue(root, 0);
        return root;
    }
};

他山之石:

其實上面的思路可以再簡化一下模狭,先從最大的節(jié)點颈抚,也就是最右葉子節(jié)點開始算,往回退嚼鹉,并用一個全局變量保存一個和贩汉,從右子節(jié)點,算到節(jié)點本身锚赤,再算到左子節(jié)點匹舞,代碼簡單很多,但是邏輯需要想清楚线脚。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
private:
    int cur_sum = 0;
public:
    void travel(TreeNode* root){
        if (!root) return;
        if (root->right) travel(root->right);
        
        root->val = (cur_sum += root->val);
        if (root->left) travel(root->left);
    }
    TreeNode* convertBST(TreeNode* root) {
        travel(root);
        return root;
    }
};

合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赐稽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浑侥,更是在濱河造成了極大的恐慌姊舵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件寓落,死亡現(xiàn)場離奇詭異括丁,居然都是意外死亡,警方通過查閱死者的電腦和手機伶选,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門史飞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人仰税,你說我怎么就攤上這事构资。” “怎么了陨簇?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵吐绵,是天一觀的道長。 經(jīng)常有香客問我,道長拦赠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任葵姥,我火速辦了婚禮荷鼠,結果婚禮上,老公的妹妹穿的比我還像新娘榔幸。我一直安慰自己允乐,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布削咆。 她就那樣靜靜地躺著牍疏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拨齐。 梳的紋絲不亂的頭發(fā)上鳞陨,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音瞻惋,去河邊找鬼厦滤。 笑死,一個胖子當著我的面吹牛歼狼,可吹牛的內(nèi)容都是我干的掏导。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼羽峰,長吁一口氣:“原來是場噩夢啊……” “哼趟咆!你這毒婦竟也來了?” 一聲冷哼從身側響起梅屉,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤值纱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后履植,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體计雌,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年玫霎,在試婚紗的時候發(fā)現(xiàn)自己被綠了凿滤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡庶近,死狀恐怖翁脆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鼻种,我是刑警寧澤反番,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響罢缸,放射性物質發(fā)生泄漏篙贸。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一枫疆、第九天 我趴在偏房一處隱蔽的房頂上張望爵川。 院中可真熱鬧,春花似錦息楔、人聲如沸寝贡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽圃泡。三九已至,卻和暖如春愿险,著一層夾襖步出監(jiān)牢的瞬間颇蜡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工拯啦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留澡匪,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓褒链,卻偏偏與公主長得像唁情,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子甫匹,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內(nèi)容