关于线段树,先看一个引子:
看到这里,我对线段树大致的理解是:针对区间求最值问题,有一种好方法----线段树,仅此而已。
线段树的概念:
这里5.22图的建树过程和上面的线段树图5.21的原理是一样的,只不过图5.22是把每一个节点都用当前区间的最小值来表示。
现在来梳理一下5.22的建树过程:①取第一个数到第七个数字为区间,相当于[1,3]这里的中括号不是数学意义上的区间符号,而是一个线段区间。那么这个区间里面,最小的数字是1,所以根节点为1;②根节点的左节点的得到,首先根据线段树的概念划分区间,(1+7)/2=4,那么第一个数字到第四个数字是左节点的区间[1,8],这个区间里面的最小值是1,所以第二层的左节点为1。那么右节点的区间也可以得到是[8,3],这个区间里面的最小值是3,即第二层右节点为3.③下面每一层都是重复上面的步骤,直到[L,R]这个区间里面L=R,即确定为叶子节点。
好,原理的阐述到此为止,下面是线段树的例子。关于线段树的例子,因为最近在忙于计算机三级以及考研相关,所以算法这方面暂时搁置。下面贴几张书上的讲解。
点修改