我将二叉搜索树(BST)存储在一个数组中,其中每个节点的左右子节点的索引计算如下:
N = parent node index
L = 2 * N + 1
R = 2 * N + 2
我希望能够快速(最好在 O(1) 时间内)计算 BST 中第 n 个元素的索引。
例如,给定以下二叉树...
A
/ \
B C
/ \ /
D E F
...它将存储在数组中,就像这样...
Node array[] = { A, B, C, D, E, F };
下表显示了每个元素的索引。
元素 | 节点 | 索引 |
---|---|---|
0 | D | 3 |
1 | B | 1 |
2 | E | 4 |
3 | A | 0 |
4 | F | 5 |
5 | C | 2 |
最有效的方法是什么?
注意: BST 将永远完美平衡...
递归树时,您可以使用以下方法计算每个节点的索引:
root.left.index = 2 * root.index + 1
root.right.index = 2 * root.index + 2