我刚刚在this question阅读了答案并且非常满意,这确实是一个很棒的答案。它告诉我BIT的工作。
但最后,最后一段是我在努力的地方。它说,
同样,让我们考虑如何进行更新。去做 这个,我们想要按照访问路径回到root, 更新我们跟随左链接的所有节点。我们可以做的 通过基本上做上述算法,但切换所有1# 0到0和0到1到1。但是,如果我看到,举一些例子,它没有 根据我的说法,就像简单地切换1和0一样。
e.g。让我们想要在节点5更新值= 101切换1和0,我们得到010 ...现在应用他们之前给出的程序,我们将最终更新其他节点左右。
我一定是弄错了。请纠正我。
提前谢谢。
答案 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 }