树状数组简明介绍

来源:互联网 发布:买fm2药在淘宝搜什么 编辑:程序博客网 时间:2024/05/12 06:41

先看一幅图
这里写图片描述

树状数组英文名叫 Binary Indexed Tree或Fenwick Tree。这也就表明 树状数组逻辑上是一种树,但是物理上是用数组来存储。

1、存储树状数组的数组下标是从1开始的。

2、如何得到一个结点的祖先结点?

观察到:
从低向上地

  • 结点1(0001)【1的二进制形式是0001】的祖先节点分别是2(0010)、4(0100),8(1000)
  • 结点2(0010)的祖先结点为4(0100),8(1000)
  • 结点3(0011)的祖先节点为4(0100),8(1000)
  • 结点5(0101)的祖先节点为6(0110),8(1000)


于是我们可以归纳出:
编号为n的父结点的编号为(n + n’)。
n’如何得到的呢?
将n写成二进制,将此二进制中的除了最后1之外所有的1改为0,改完得到的就是n’的二进制表示,所以就得到了n’。

3、如何得到一个结点的左边的兄弟结点?

观察到,自右向左:

  • 3(0011)左边的兄弟分别为1(0010)
  • 5(0101)左边的兄弟分别为4(0100)
  • 7(0111)左边的兄弟分别为6(0110)、4(0100)


于是我们可以归纳出:
编号为n的结点右边挨着的兄弟节点的编号为n-n’。
n’如何得到呢?其实和2中的n’是一样的。

0 0
原创粉丝点击