Целью вывода дерева является вывод содержащихся в нем элементов в отсортированном порядке. Помните, что
twalk
посещает промежуточные вершины по три раза и что левая вершина меньше родительской, тогда как правая больше. Таким образом, оператор
switch
выводит сведения о вершине, лишь если
which
равно
leaf
, является концевой вершиной, или
postorder
, что означает, что была посещена левая вершина, а правая еще не была посещена.
Используемые данные представляют собой список президентов, тоже из раздела 6.2 «Функции сортировки и поиска». Чтобы освежить вашу память, полями являются фамилия, имя, номер сотрудника и время начала работы в виде временной отметки в секундах с начала Эпохи:
$ cat presdata.txt
Bush George 43 980013600
Clinton William 42 727552800
Bush George 41 601322400
Reagan Ronald 40 348861600
Carter James 39 222631200
Данные сортируются на основе сначала фамилии, затем имени, а затем старшинства. При запуске [160] программа выдает следующий результат:
$ ch14-tsearch < presdata.txt
Depth: 1. Employee:
Bush, George 41 Fri Jan 20 13:00:00 1989
Depth: 0. Employee:
Bush, George 43 Sat Jan 20 13:00:00 2001
160
Этот вывод для часового пояса U.S. Eastern Time zone — Примеч. автора.
Depth: 2. Employee:
Carter, James 39 Thu Jan 20 13:00:00 1977
Depth: 1. Employee:
Clinton, William 42 Wed Jan 20 13:00:00 1993
Depth: 2. Employee:
Reagan, Ronald 40 Tue Jan 20 13:00:00 1981
14.4.6. Удаление вершины дерева и удаление дерева:
tdelete
и
tdestroy
Наконец, вы можете удалить элементы из дерева и, на системах GLIBC, удалить само дерево целиком:
: ключ, адрес корня дерева и функция сравнения. Если в дереве найден данный элемент, он удаляется, и
tdelete
возвращает указатель на родительскую вершину. В противном случае возвращается
NULL
. С этим поведением следует обращаться в своем коде осмотрительно, если вам нужен первоначальный удаляемый элемент, например, для освобождения занимаемой им памяти.