Книга: Программирование на языке 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.

Оглавление книги


Генерация: 1.193. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз