美文网首页数据结构
线段树 05 在线段树中更新单个元素

线段树 05 在线段树中更新单个元素

作者: 乌鲁木齐001号程序员 | 来源:发表于2019-02-14 13:08 被阅读3次

在线段树中更新单个元素

  • 在线段树中更新一个元素的过程分2步:
    • 在data中更新;
    • 由于data的更新导致在tree上也要更新;
// 将index位置的值,更新为e
public void set(int index, E e){

    if(index < 0 || index >= data.length)
        throw new IllegalArgumentException("Index is illegal");

    data[index] = e;
    set(0, 0, data.length - 1, index, e);
}
  • 在tree中做协变的更新是个递归问题:在treeIndex为根的线段树中更新index的值为e;
  • 规模更小的同一个问题是:在treeIndex的左右子树中更新index的值为e;
    • 当index <= mid时:在treeIndex的左子树中更新index的值为e;
    • 当index >= mid + 1时:在treeIndex的右子树中更新index的值为e;
    • treeIndex的左右子树都更新完成之后,重新合并treeIndex的左右孩子的值,赋予tree[treeIndex];
  • 不能再缩小的基本问题是:treeIndex已经是叶子节点了,其只代表了data中的一个元素,即 l == r,就在tree中把tree[treeIndex]更新为e;
// 在以treeIndex为根的线段树中更新index的值为e
private void set(int treeIndex, int l, int r, int index, E e){

    if(l == r){
        tree[treeIndex] = e;
        return;
    }

    int mid = l + (r - l) / 2;
    // treeIndex的节点分为[l...mid]和[mid+1...r]两部分
    int leftTreeIndex = leftChild(treeIndex);
    int rightTreeIndex = rightChild(treeIndex);
    if(index >= mid + 1)
        set(rightTreeIndex, mid + 1, r, index, e);
    else // index <= mid
        set(leftTreeIndex, l, mid, index, e);

    tree[treeIndex] = merger.merge(tree[leftTreeIndex], tree[rightTreeIndex]);
}

相关文章

  • 线段树 05 在线段树中更新单个元素

    在线段树中更新单个元素 在线段树中更新一个元素的过程分2步:在data中更新;由于data的更新导致在tree上也...

  • 线段树专题整理

    待更新 线段树讲解(未读)线段树模板(未读) 模板 求区间总和 A - 敌兵布阵 HDU - 1166 题意 线段...

  • 线段树系列之——区间更新

    第三篇线段树了——重点不在于解决题目,通过题目理解线段树才是重点 前面写了一篇关于线段树的单点更新,线段树的单点更...

  • 线段树-从零基础到入门到入坟

    感谢 线段树从零开始By 岩之痕 由于自己线段树比较菜,还在学习,所以本文会不断更新 正文 什么是线段树 练习

  • 线段树模板

    线段树 线段树基本概念 概述 线段树,类似区间树,是一个完全二叉树,它在各个节点保存一条线段(数组中的一段子数组)...

  • 算法模板(七) 线段树

    线段树单点操作 线段树区间操作

  • 数据结构-线段树

    实现一个线段树 下面实现的线段树,有三个功能: 把数组构建成一颗线段树 线段树的修改 线段树的查询 303号问题 ...

  • 线段树(区间树)

    线段树:线段树是一种二叉树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个叶结点。线段树适用于不变...

  • 10.线段树(比较高级的数据结构)

    一、线段树(区间树)的概念 Segment Tree;线段树属于高级数据结构,经常出现在算法竞赛中为什么要使用线段...

  • 数据结构-线段树

    线段树定义: 线段树是一种二叉搜索树,又叫区间树,它将一个区间划分成一些单元区间,每个单元区间对应线段树中的一个...

网友评论

    本文标题:线段树 05 在线段树中更新单个元素

    本文链接:https://www.haomeiwen.com/subject/wefeeqtx.html