我正在研究C ++中的大代码库。有如下所述的行
int capacity( ) const
{
return ( 1 << theTrees.size( ) ) - 1;
}
这里的树是
vector<int> theTrees
声明1 << theTrees.size( )
可能试图实现的是什么?假设我们的树大小为25个元素。
答案 0 :(得分:6)
如果你的问题是关于C ++:1<<
通常被认为是“2 * * N * th power。”
如果您的问题与数据结构理论有关:高度 n 的二叉树每层最多有 2 ^ i 个节点,最多 2 ^总共n - 1个个节点。
(但你应该用这种方式标记)
答案 1 :(得分:2)
在二进制中,1是:
1
如果我们将其左移1 << 1
,那么我们就有了:
10
这是十进制2
。所以转移<< 25
意味着我们得到:
10000000000000000000000000
这是:
33554432
如果我们向左移一个十进制,那么我们将乘以二,乘以二进制乘以2.这样我们得到2 ^ 25。
答案 2 :(得分:2)
计算两个theTree.size()
减去1
答案 3 :(得分:2)
我认为在这种情况下,大小实际上是级别数。假设你有一个平衡的二叉树,这就是树中元素的数量(如果它是完整的)。例如,只有头部的树有1 << 1 -1 = 1
个可能的节点,其中3个级别的完整树有1 << 3 - 1 = 7
个节点(头部是两个孩子,孩子是四个孩子)
答案 4 :(得分:2)
左移n基本上乘以2到n次方。只要你有1 << n
,你就只计算2的n次幂。例如:
1 << 0 = 1
1 << 1 = 2
1 << 2 = 4
1 << 3 = 8
等
我怀疑theTrees.size()
不返回树中元素的数量,而是返回树的高度(级别数),因为这是唯一有意义的方法。给定完整的二叉树,节点的数量是2 ^ N - 1,其中N是树的高度。例如,具有三个级别(n = 3)的树可以容纳2 ^ 3-1 = 7个节点。检查一下:第一级有一级,第二级有两级,第三级有四级。 1 + 2 + 4 = 7。