Подтвердить что ты не робот

Каково общее количество узлов в полном k-арном дереве в терминах количества листьев?

Я делаю уникальную форму кодирования Хаффмана, и я создаю k-ary (в данном конкретном случае, 3-арное) дерево, полное (каждый node будет иметь 0 или k детей), и я знаю сколько листьев у него будет, прежде чем я его построю. Как вычислить общее количество узлов в дереве в терминах количества листьев?

Я знаю, что в случае полного бинарного дерева (2-арного) формула для этого равна 2L - 1, где L - количество листьев. Я хотел бы распространить этот принцип на случай k-арного дерева.

4b9b3361

Ответ 1

Подумайте о том, как доказать результат для полного двоичного дерева, и вы увидите, как это сделать в целом. Для полного двоичного дерева, например height h, число узлов N равно

N = 2^{h+1} - 1

Почему? Поскольку на первом уровне есть узлы 2^0, на втором уровне есть 2^1 узлы, и, как правило, k -ый уровень имеет 2^{k-1} узлы. Добавление этих значений в общей сложности уровней h+1 (так что высота h) дает

N = 1 + 2 + 2^2 + 2^3 + ... + 2^h = (2^{h+1} - 1) / (2 - 1) = 2^{h+1} - 1

Общее количество листьев L - это просто количество узлов на последнем уровне, поэтому L = 2^h. Поэтому подстановкой получим

N = 2*L - 1

Для дерева k -ary ничего не меняется, но 2. Итак,

N = 1 + k + k^2 + k^3 + ... + k^h = (k^{h+1} - 1) / (k - 1)

L = k^h

и поэтому бит алгебры может сделать вам последний шаг, чтобы получить

N = (k*L - 1) / (k-1)

Ответ 2

Для любого k-арного дерева общее число узлов n = [(k ^ (h + 1)) - 1]/(h-1), где h - высота k-арного дерева.

Ex: - для полного двоичного дерева (k = 2) общее число. узлов = [(2 ^ (h + 1)) - 1]/(h-1).

Итак, для высоты 3 общий №. узлов будет 15.

Для полного тройного древовидного дерева (k = 3) общее число. узлов = [(3 ^ (h + 1)) - 1]/(h-1).

Итак, для высоты 3 общий №. узлов будет 40.

Ответ 3

Формула для 2L-1, о которой вы упоминали, - это поиск полного, полного и сбалансированного двоичного дерева: на последнем уровне у вас есть 2 ^ h листа, а на других уровнях: 1 + 2 + 4 +.... + 2 ^ (h-1) = 2 ^ h -1 листы. Когда вы "путаете" уровни в дереве и создаете неуравновешенный, то количество внутренних узлов, которые у вас есть, не изменяется.

В трехмерном дереве его та же логика: на последнем уровне у вас есть 3 ^ h листьев, а на других уровнях: 1 + 3 + 9 +.... + 3 ^ (h-1) = ( 3 ^ h -1)/2, это означает, что на 3-арном дереве у вас есть 1.5 * L - 0.5 листа (и это имеет смысл, потому что степень больше, вам нужно меньше внутренних узлов). Я так же и здесь, когда вы испортили уровни в дереве, вам все равно потребуется такое же количество внутренних узлов.

Надеюсь, что это поможет вам