本文主要是介绍LeetCode 题203:线段树的修改,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
对于一棵 最大线段树, 每个节点包含一个额外的 max 属性,用于存储该节点所代表区间的最大值。
设计一个 modify 的方法,接受三个参数 root、 index 和value。该方法将 root 为根的线段树中[start, end] = [index, index]的节点修改为了新的 value ,并确保在修改后,线段树的每个节点的 max 属性仍然具有正确的值。
例如:
对于线段树:
如果调用 modify(root, 2, 4), 返回:
或 调用 modify(root, 4, 0), 返回:
数据结构:
/*** Definition of SegmentTreeNode:* class SegmentTreeNode * {* public:* int start, end, max;* SegmentTreeNode *left, *right;* SegmentTreeNode(int start, int end, int max) * {* this->start = start;* this->end = end;* this->max = max;* this->left = this->right = NULL;* }* }**/
代码:
class Solution
{
public:void modify(SegmentTreeNode *root, int index, int value){if(root == NULL){return;}if(root->start==root->end){ if(root->start==index) {root->max=value; }return ; } modify(root->left,index,value); modify(root->right,index,value); root->max = max(root->left->max, root->right->max); }
};
这篇关于LeetCode 题203:线段树的修改的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!