线段树在处理区间查询时,如何实现高效的数据结构设计?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1794个文字,预计阅读时间需要8分钟。
一、概述线性树是一种二叉搜索树,存储的是区间信息。每个节点以结构体形式存储,包含三个元素:区间左端点、区间右端点及该区间要维护的信息(实际意义)。
二、结构体定义cstruct Node { int left; int right; int info;};
一、概述
线段树是一种二叉搜索树,其存储的是一个区间的信息,每个结点以结构体的形式去存储,每个结构体包含三个元素:区间左端点、区间右端点、该区间要维护的信息(视实际情况而定),其基本思想是分治的思想。
其特点是:
- 每个节点的左孩子区间范围为 [l,mid],右孩子为 [mid+1,r]
- 对于结点 k,左孩子结点为 2 * index + 1,右孩子为 2 * index + 2,符合完全二叉树的性质。
- 线段树不是完全二叉树。
- 线段树是平衡二叉树。
二、线段树
2.1 使用数组构建线段树
如下图所示数组A,以求和为例:根节点A[0-7]存放的就是A[0-3]节点和A[4-7]节点之和,下面的每个节点存放的值都是该节点对应左右孩子节点的和,这样就用数组构建出了一个线段树。
- 可以把线段树当成满二叉树进行处理。
- 对于有n个元素的区间,数组只需要4n的空间就可以完全存储整颗线段树,4n的空间会有部分浪费,最坏的情况可能会有接近2n的空间被浪费。
- 不考虑添加元素。
本文共计1794个文字,预计阅读时间需要8分钟。
一、概述线性树是一种二叉搜索树,存储的是区间信息。每个节点以结构体形式存储,包含三个元素:区间左端点、区间右端点及该区间要维护的信息(实际意义)。
二、结构体定义cstruct Node { int left; int right; int info;};
一、概述
线段树是一种二叉搜索树,其存储的是一个区间的信息,每个结点以结构体的形式去存储,每个结构体包含三个元素:区间左端点、区间右端点、该区间要维护的信息(视实际情况而定),其基本思想是分治的思想。
其特点是:
- 每个节点的左孩子区间范围为 [l,mid],右孩子为 [mid+1,r]
- 对于结点 k,左孩子结点为 2 * index + 1,右孩子为 2 * index + 2,符合完全二叉树的性质。
- 线段树不是完全二叉树。
- 线段树是平衡二叉树。
二、线段树
2.1 使用数组构建线段树
如下图所示数组A,以求和为例:根节点A[0-7]存放的就是A[0-3]节点和A[4-7]节点之和,下面的每个节点存放的值都是该节点对应左右孩子节点的和,这样就用数组构建出了一个线段树。
- 可以把线段树当成满二叉树进行处理。
- 对于有n个元素的区间,数组只需要4n的空间就可以完全存储整颗线段树,4n的空间会有部分浪费,最坏的情况可能会有接近2n的空间被浪费。
- 不考虑添加元素。

