BIT:无法理解二进制索引树中的更新操作

时间:2015-02-08 16:58:26

标签: algorithm data-structures tree binary-tree bit

我刚刚在this question阅读了答案并且非常满意,这确实是一个很棒的答案。它告诉我BIT的工作。

但最后,最后一段是我在努力的地方。它说,

  

同样,让我们​​考虑如何进行更新。去做   这个,我们想要按照访问路径回到root,   更新我们跟随左链接的所有节点。我们可以做的   通过基本上做上述算法,但切换所有1#   0到0和0到1到1。但是,如果我看到,举一些例子,它没有   根据我的说法,就像简单地切换1和0一样。

e.g。让我们想要在节点5更新值= 101切换1和0,我们得到010 ...现在应用他们之前给出的程序,我们将最终更新其他节点左右。

我一定是弄错了。请纠正我。

提前谢谢。

1 个答案:

答案 0 :(得分:0)

我认为你是对的。 使用此:

                     1
               /           \
         2                      3
      /      \                /     \
   4           5           6          7
 /   \       /   \       /   \       /  \
8     9    10    11    12    13    14    15

功能:

int root(int node_index) { return node_index >> 1 }

int left(int node_index) { node_index << 1 }

int right(int node_index) { left(node_index) | 1 }