yes樣例對於線段樹:
[1, 4, max=3]
/ \
[1, 2, max=2] [3, 4, max=3]
/ \ / \
[1, 1, max=2], [2, 2, max=1], [3, 3, max=0], [4, 4, max=3]
[1, 4, max=4]
/ \
[1, 2, max=4] [3, 4, max=3]
/ \ / \
[1, 1, max=2], [2, 2, max=4], [3, 3, max=0], [4, 4, max=3]
或
[1, 4, max=2]
/ \
[1, 2, max=2] [3, 4, max=0]
/ \ / \
[1, 1, max=2], [2, 2, max=1], [3, 3, max=0], [4, 4, max=0]
思路:首先清楚最大線段樹的定義,然後,還是利用線段樹的性質,分析清楚基準情形,利用遞迴來求解。
使用遞迴,雖然速度慢了些,但對於複雜問題,理解起來更容易,思路更清晰。
先找到index所在葉子節點,並修改該葉子節點的值,然後再從下往上依次更新其父節點的max值。
/*** definition of segmenttreenode:
* class segmenttreenode
* }*/class solution
if(index>root->end||indexstart)
if(index==root->start&&root->start==root->end)
modify(root->left,index,value);
modify(root->right,index,value);
root->max=max(root->left->max,root->right->max);
}};
lintcode 203 線段樹的修改
對於一棵 最大線段樹,每個節點包含乙個額外的max屬性,用於儲存該節點所代表區間的最大值。設計乙個modify的方法,接受三個引數root index和value。該方法將 root 為根的線段樹中 start,end index,index 的節點修改為了新的 value 並確保在修改後,線段樹的...
lintcode203 線段樹的修改
題目描述 思路 線段樹的葉子節點就是陣列中每乙個位置的元素值,所以先找到要修改的位置,即先到達要修改的葉子節點,修改該節點的max值,然後再從葉子節點回到根節點,返回過程中,比較節點的左右孩子的max值,取兩者較大者作為本節點的max值,這樣無論value值和max值的大小關係,都作為一種情況考慮。...
lintcode203 線段樹的修改
對於一棵 最大線段樹,每個節點包含乙個額外的 max 屬性,用於儲存該節點所代表區間的最大值。設計乙個 modify 的方法,接受三個引數 root index 和 value。該方法將 root 為根的線段樹中 start,end index,index 的節點修改為了新的 value 並確保在修...