Простой способ:
Допустим, A - это двоичное дерево с дочерними элементами или узлами, которые не являются NULL . Например,
3
/ \
7 5
\ \
6 9
/ \ /
1 11 4
Теперь для подсчета количества узлов у нас есть простой обходной путь.
Рекурсивный метод: >>> get_count (root)
Для бинарного дерева основная идея рекурсии состоит в том, чтобы пройти дерево в Post-Order . Здесь, если текущий узел заполнен, мы увеличиваем результат на 1 и добавляем возвращаемые значения левого и правого поддеревьев, такие как:
class TestNode():
def __init__(self, data):
self.data = data
self.left = None
self.right = None
Теперь мы продвигаемся вперед, чтобы получить количество полных узлов в двоичном дереве, используя метод, приведенный ниже:
def get_count(root):
if (root == None):
return 0
res = 0
if (root.left and root.right):
res += 1
res += (get_count(root.left) +
get_count(root.right))
return res
В конце, чтобы запустить код, мы будем управлять основной областью действия : Здесь мы создаем наше двоичное дерево A , как указано выше:
if __name__ == '__main__':
root = TestNode(3)
root.left = TestNode(7)
root.right = TestNode(5)
root.left.right = TestNode(6)
root.left.right.left = TestNode(1)
root.left.right.right = TestNode(4)
Теперь в конце, внутри main scope мы напечатаем количество двоичных файловузлы дерева, такие как:
print(get_Count(root))
Вот временная сложность этой рекурсивной функции для get_count для двоичного дерева A .
Сложность времени: O (n)