Lintcode203 Segment Tree Modify solution 題解
【題目描述】
For a Maximum Segment Tree, which each node has an extra value max to store the maximum value in this node‘s interval.
Implement a modify function with three parameter root,index and value to change the node‘s value with[start, end] = [index, index]to the new given value. Make sure after this change, every node in segment tree still has the max
Notice
We suggest you finish problem Segment Tree Build and Segment Tree Query first.
對於一棵最大線段樹, 每個節點包含一個額外的max屬性,用於存儲該節點所代表區間的最大值。
設計一個modify的方法,接受三個參數root、index和value。該方法將root為根的線段樹中 [start,end] = [index,index] 的節點修改為了新的value,並確保在修改後,線段樹的每個節點的max屬性仍然具有正確的值。
【註】:在做此題前,最好先完成線段樹的構造和線段樹查詢這兩道題目。
【題目鏈接】
www.lintcode.com/en/problem/segment-tree-modify/
【題目解析】
此題依然可使用遞歸。
非葉子節點的max是其左右子節點的max值中大的那個。所以先遞歸找到start和end都等於index的葉子節點,更新其max為value,在逐級彈棧時更新每個節點的max值。
註意:若樹的結點範圍為0~n,那麽至少有n/2個數在左子樹上,所以if語句裏用了<=號。另外,最後一句root.max = Math.max(root.left.max, root.right.max)是調用遞歸之後的結果,必須寫在最後面。
【參考答案】
www.jiuzhang.com/solutions/segment-tree-modify/
作者:程風破浪會有時
鏈接:https://www.jianshu.com/p/57b56a77c947
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
Lintcode203 Segment Tree Modify solution 題解