Тверской государственный университет
Опубликован: 21.08.2007 | Доступ: свободный | Студентов: 3170 / 267 | Оценка: 4.08 / 3.92 | Длительность: 15:40:00
ISBN: 978-5-9556-0110-6
Специальности: Программист, Математик
Лекция 10:

Деревья

< Лекция 9 || Лекция 10: 123 || Лекция 11 >

Обходы деревьев

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

Прямой (префиксный) обход дерева основан на принципе: "сначала родитель, затем дети". Определим индукцией по построению дерева T в определении 10.3 его прямое представление ПР(T) следующим образом.

  1. Если T_{0}=( \{ v\} ,\varnothing ), то ПР(T0)= v.
  2. Если T получено из деревьев T1, ..., Tk и нового корня r0 по пункту (2) определения 10.3 то ПР(T)= r0\, ПР(T1)... ПР(Tk).

Обратный (суффиксный) обход дерева основан на противоположном принципе: "сначала дети , затем родитель". Вот его индуктивное определение.

  1. 1) Если T_{0}=( \{ v\} ,\varnothing ), то ОБР(T0)= v.
  2. 2) Если T получено из деревьев T1, ..., Tk и нового корня r0 по пункту (2) определения 10.3, то ОБР(T)= ОБР(T1)... ОБР(Tk)\, r0.

Для бинарных деревьев, внутренние вершины которых имеют не более 2-х сыновей, помеченных как "левый" и "правый", можно естественно определить еще один способ обхода - инфиксный (внутренний) обход, основанный на принципе: "сначала левый сын, затем родитель, а затем правый сын". Он определяется следующим образом.

  1. Если T_{0}=( \{ v\} ,\varnothing ), то ИНФ(T0)= v.
  2. Если T получено из деревьев T1, T2 и нового корня r0 по пункту (2) определения 10.3, то ИНФ(T)= ИНФ(T1) r0 ИНФ(T2)

(Если одно из деревьев T1, T2 пусто, то соответствующее ему инфиксное представление тоже пусто).

Пример 10.2. Построим в соответствии с этими определениями три разных обхода бинарного дерева T_{\Phi }, изображенного на рис. 10.4 (в скобках после вершины указана ее метка).

\textit{ПР}(T_\Phi) = v_1(+)v_2(*)v_4(5)v_5(+)v_8(x)v_9(7)v_3(:)v_6(y)v_7(+)v_{10}(x)v_{11}(7).\\ 
\textit{ОБР}(T_\Phi) = v_4(5) v_8(x)v_9(7) v_5(+)v_2(*) v_6(y) v_{10}(x) v_{11}(7) v_7(+)v_3(:)v_1(+).\\ \textit{ИНФ}(T_\Phi)= v_4(5)  v_2(*)v_8(x)v_5(+)v_9(7)v_1(+)v_6(y)v_3(:)v_{10}(x)v_7(+)v_{11}(7).

Для упорядоченного размеченного дерева T из класса \mathcal{T}({\bf F},{\bf C},{\bf Var}) по любому из указанных обходов ПР(T), ОБР(T) и, если дерево бинарное, - ИНФ(T) можно однозначно восстановить само дерево T (см. задачу 10,6).

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

Задачи

Задача 10.1. Докажите, что если в связном неориентированном графе число вершин равно числу ребер, то можно выбросить одно из ребер так, что после этого граф станет деревом.

Задача 10.2. Пусть G=(V, E) - неориентированное дерево и v\in  V - произвольная вершина. Докажите, что если для каждого ребра (u,w) \in  E выбрать ориентацию от u к w, если им заканчивается путь из v в w, и ориентацию от w к u, если им заканчивается путь из v в u, то полученный ориентированный граф будет ориентированным деревом с корнем v. Используйте это утверждение для доказательства следующего факта: если в неориентированном дереве G=(V, E) имеется вершина степени d >1, то в нем имеется по крайней мере d вершин степени 1.

Задача 10.3. Пусть T=(V,E) - это ориентированное дерево с корнем v_{0} \in  V. определим для каждой вершины v\in  V подграф Tv=(Vv, Ev) следующим образом: Vv - это множество вершин, достижимых из v в T, а Ev - это множество ребер из E, оба конца которых входят в Vv. Доказать, что

  • Tv является деревом с корнем v ;
  • если две разные вершины v и u имеют одинаковую глубину, то деревья Tv и Tu не пересекаются.

Задача 10.4. Пусть G=(V,E) - ориентированный граф с n >1 вершинами. Докажите, что G является (ориентированным) деревом тогда и только тогда, когда в G нет циклов, имеется одна вершина r, в которую не входят ребра, а в каждую из остальных вершин v \in  V \setminus  \{ r\} входит ровно одно ребро.

Задача 10.5. Пусть корень ориентированного дерева T имеет 5 сыновей, а каждая из остальных внутренних вершин имеет три или четыре сына, при этом число вершин с 3-я сыновьями вдвое больше числа вершин с 4-я. Сколько всего вершин и ребер в T, если известно, что число его листьев равно 27?

Задача 10.6. Для каждого из обходов деревьев ПР(T), ОБР(T) и ИНФ(T) предложите процедуру, восстановления соответствующего дерева T \in \mathcal{T}({\bf F},{\bf C},{\bf Var}).

Задача 10.7. Докажите по индукции, что в любом бинарном дереве число вершин степени 2 на единицу меньше числа листьев.

Задача 10.8. Определите число листьев и число вершин в полном бинарном дереве высоты h.

Задача 10.9. Постройте дерево, представляющее следующую логическую формулу

\Psi = ((X \vee \neg Y) \wedge \neg( Z \rightarrow (X \wedge Y))) \vee (\neg Z + Y)

Для полученного дерева определите прямой, обратный и инфиксный обходы.

Задача 10.10. Постройте дерево и ациклический ориентированный граф, представляющие следующую арифметическую формулу

\Phi = (a+b)/(c+a*d) +(( c+a*d)-(a+b)*(c-d))

Сколько вершин удалось сократить?

< Лекция 9 || Лекция 10: 123 || Лекция 11 >
Елена Алексеевская
Елена Алексеевская

Это в лекции 3.

Татьяна Дембелова
Татьяна Дембелова

Почему в вводной лекции курса Основы дискретной математики одним из свойств отношения частичного порядка упоминается антирефлексивность? Посмотрела в других источниках, там -0  рефлексивность... http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BD%D0%BE%D1%88%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B0