Книга: Программирование на языке Ruby
9.3.4. Преобразование дерева в строку или массив
9.3.4. Преобразование дерева в строку или массив
С помощью тех же приемов, которые применяются для обхода дерева, мы можем преобразовать его в строку или в массив. Ниже мы выполняем обход во внутреннем порядке, хотя подошел бы и любой другой способ:
class Tree
# Предполагается, что определения взяты из предыдущего примера...
def to_s
"[" +
if left then left.to_s + "," else "" end +
data.inspect +
if right then "," + right.to_s else "" end + "]"
end
def to_a
temp = []
temp += left.to_a if left
temp << data
temp += right.to_a if right
temp
end
end
items = %w[bongo grimace monoid jewel plover nexus synergy]
tree = Tree.new
items.each {|x| tree.insert x}
str = tree.to_a * ","
# str is now "bongo,grimace,jewel,monoid,nexus,plover,synergy"
arr = tree.to_a
# arr равно:
# ["bongo",["grimace",[["jewel"],"monoid",[["nexus"],"plover",
# ["synergy"]]]]]
Отметим, что глубина вложенности получающегося массива равна глубине дерева с корнем в том узле, с которого мы начали обход. Чтобы получить плоский массив, можете воспользоваться методом flatten
.
- 9.3.1. Реализация двоичного дерева
- Преобразование XML в реляционную базу данных
- Как выделить строку, столбец и ячейки
- Динамические массивы
- Новые функции API для работы с Blob и массивами
- Преобразование строки в целое: stoi( )
- 8.1.4. Сравнение массивов
- Обход дерева
- 8.1.22. Чередование массивов
- 9.1 Массивы RAID
- 9.2 Реализация массива ftAID на платформе Windows NT
- 8.2.8. Копирование хэша в массив