【问题标题】:Constructing a Ruby Binary Tree from String从字符串构造一个 Ruby 二叉树
【发布时间】:2016-09-05 14:01:00
【问题描述】:

对计算科学有点新手。

我已经掌握了 Ruby 中二叉树的基础知识:

class Node
  attr_accessor :left, :right, :value
  def initialize(value)
    @value = value
  end
end

如果我手动构造它,这很好用,例如,如果我希望 tom 成为 ben 的子节点:

ben = Node.new('Ben')
tom = Node.new('Tom')

ben.left = tom

我需要解决的一个挑战是如何为输入的父/子对构建树。这是一个示例输入字符串:

peter tom
peter marie
marie john
tom oscar

我的二叉树看起来像这样:

    peter
      |
 tom     marie
  |        |
oscar     john

我想知道是否可以将以下格式"[parent] [child]" 的多个字符串转换为二叉树。

谢谢:)

【问题讨论】:

  • 使用[parent] [child] 格式,你如何决定一个孩子是进入left 还是right?同样,如果输入包含给定父项的两个以上子项,会发生什么情况?
  • 值可以是唯一的?

标签: ruby algorithm binary-tree


【解决方案1】:

使用哈希存储数据:

data = Hash.new { |h, k| h[k] = Node.new k }

while !(line = gets.strip).empty?
    parent, child = line.split.map { |value| data[value] }
    if !parent.left
        parent.left = child
    elsif !parent.right
        parent.right = child
    else
        raise "#{parent.value} already has both a left and right child"
    end
end

【讨论】:

  • 不错的解决方案,尤其是您定义data 的方式。一件小事:你需要像while (line = gets.strip) != ''这样的东西。因为它是你永远不会跳出循环。
  • @CarySwoveland 已修复。
  • 很棒的解决方案!工作完美。谢谢
猜你喜欢
  • 1970-01-01
  • 2019-10-18
  • 1970-01-01
  • 1970-01-01
  • 2020-08-27
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2023-03-28
相关资源
最近更新 更多