Как решить данные задачи по алгоритмам
Подскажите, пожалуйста, как решить следующие задания по алгоритмам:

Я пробовал решить пятый следующим образом:
№ 5
Возьмем к примеру следующее дерево:

Высота этого дерева равна 4, а состоит оно из 15 элементов. Проверим по данной нам формуле, что в этом дереве только одно дерево с высотой, равной 4: 15/2^(4) + 1, а это приблизительно 0,88. Это действительно так – в этом дереве находится не больше 0,88 поддеревьев с высотой 4. Идем дальше – в этом дереве два поддерева с высотой 3(31, 24, 8, 20, 11, 3, 2 - первое поддерево; 30, 17, 10, 15, 5, 2, 1 - второе) =>15/2^(3) + 1, это приблизительно равно двум. Это действительно так – в этом дереве находится не больше двух поддеревьев с высотой 3. Идем дальше – в этом дереве 4 поддерева с высотой два(24, 20, 11 - первое; 8, 3, 2 - второе; 17, 15, 5 - третье; 10, 2, 1 - четвертое) =>15/2^(2)+1, а это равно 3. Но не сходится, т.к. в этом дереве 4 поддерева с высотой 2, а у меня получилось по формуле, что их не больше 3. Да и число поддеревьев с высотой 3 также вызывает несостыковку - их 2, а у меня по формуле получилось, что их не больше 1,6... а я просто округлил до двух. Может я что-то в формуле не так делаю или неправильно понимаю, как определять сколько поддеревьев в дереве с определенной высотой. А в седьмом у меня вообще нет идей, мне казалось, что этот алгоритм всегда должен работать за линейное время.
