我有一个完整的二叉树(即一个树,其中"每个级别,除了可能是最后一个,完全填充,所有节点尽可能地离开") 。 此树以深度优先,从左到右的顺序存储。我的问题是,给定一个按索引的节点和树的总大小,告诉我该节点的左子树中有多少个节点,在O(1)中。
例如,假设树的总大小为10.这意味着以下完整树(注意:数字是深度优先,从左到右顺序的节点索引):
0
/ \
1 7
/ \ |\
2 5 8 9
/| /
3 4 6
现在,给定一个节点索引,我需要找到它有多少个左子节点。对于这个例子:
每个这样的查询必须花费O(1)时间并且只是节点索引和树大小的函数(例如,我不能在树中存储任何内容)。
我觉得这应该是一个相当简单的问题,但到目前为止我还没能弄明白。
严格地说,这是我的问题的一个简化;我实际上想要1+这个值,而且我永远不会在叶子上调用该函数。但核心问题是这个。