class TaskList
  def items
    @items ||= []
  end

  def append(tree)
    items << tree
    tree.children.sort.each do |subtree|
      append subtree
    end
  end
end

class Task
  attr_reader :name, :children

  def initialize(name, children = [])
    @name = name
    @children = children
  end

  def <=>(other)
    name <=> other.name
  end
end

task_list = TaskList.new

task_list.append Task.new('Foo', [
  Task.new('Car', [
    Task.new('Ddd'),
    Task.new('Aaa'),
    Task.new('Ccc'),
    Task.new('Bbb'),
  ]),
  Task.new('Bar'),
])

puts task_list.items.map(&:name)