Сдвиг влево на n в основном умножается на 2 до n-й степени. Всякий раз, когда у вас есть 1 << n
, вы просто вычисляете n-ую степень 2. Например: 1002
1 << 0 = 1
1 << 1 = 2
1 << 2 = 4
1 << 3 = 8
Etc.
Я подозреваю, theTrees.size()
возвращает не количество элементов в дереве, а высоту дерева (количество уровней), потому что это единственный способ, который имеет смысл. Для полного двоичного дерева число узлов равно 2 ^ N - 1, где N - высота дерева. Например, дерево с тремя уровнями (n = 3) может содержать 2 ^ 3 - 1 = 7 узлов. Проверьте это: у первого уровня есть один, у второго есть два, и у третьего есть четыре. 1 + 2 + 4 = 7.