ВНИМАНИЕ Для заказа программы на двоичное дерево поиска пишите на мой электронный адрес proglabs@mail.ru

Иногда мне приходится искать количество неполных вершин ( я их также называю половинчатые ) в поисковом двоичном дереве. Решил ( в первую очередь для себя ) написать эту заметку-шпаргалку, чтобы при необходимости быстро вспомнить алгоритм.

Хочу рассмотреть следующее анонимное двоичное дерево поиска:

анонимное поисковое двоичное дерево

Рисунок — стандартное анонимное бинарное дерево поиска

➡ Очевидно, чтобы найти количество неполных узлов в бинарном дереве, необходимо знать определения термина «неполный узел», чтобы понимать, а что, собственно, ищем-то.

Неполный узел — узел поискового двоичного дерева, который имеет либо левого, либо правого потомка ( но не оба одновременно ).

Тогда я отмечу все неполные узлы на рассматриваемом анонимном дереве синим цветом:

половинчатые узлы бинарного дерева

Рисунок — неполные узлы бинарного дерева поиска

Моя задача — понять, каким образом найти все эти «синие» вершины, являющиеся неполными узлами. То есть мне нужна функция, которая в качестве результата вернет количество таких вершин в заданном бинарном поисковом дереве.

Хочу внимательно рассмотреть это анонимное поисковое двоичное дерево, на котором будут отображены все вершинные связи:

бинарное дерево поиска со всеми связями

Рисунок — бинарное дерево поиска со всеми связями его вершин

Из рисунка видно, что неполные узлы в отличие от листовых узлов не заканчивают ветвление дерева, следовательно, рекурсивная функция не должна останавливаться, когда встретит на своем пути неполный узел.

➡ Другими словами, один неполный узел может быть родителем по отношению к одному или нескольким неполным узлам.

один неполный узел может быть родителем по отношению к другому неполному узлу

Рисунок — неполный узел $1$ является предком для другого неполного узла $2$

 

 

В результате я запрограммировал следующую программную рекурсивную функцию, которая на вход принимает указатель на корень бинарного дерева поиска и в результате возвращает количество неполных вершин, которое оно содержит:

Функция Get_status_node() принимает указатель на заданную вершину и в качестве ответа возвращает статус этой вершины. Статус может принимать одно из четырех значений, которые определены в перечислении Node_status:

➡ В комментариях пишите, что непонятно по алгоритму нахождения количества неполных вершин в двоичном поисковом дереве, а также, насколько часто вам приходилось на практике сталкиваться с этим алгоритмом.

А в следующей статье я хочу написать, как найти количество полных вершин в заданном дереве. Кстати, алгоритм будет сильно схожим с текущим.

ВНИМАНИЕ Для заказа программы на бинарное дерево поиска пишите на мой электронный адрес proglabs@mail.ru