【发布时间】:2019-03-06 00:32:12
【问题描述】:
我有一个如下的二叉树实现。我想添加一个递归总结二叉树所有节点值的方法:
class BST
class Node
attr_reader :value, :left, :right
def initialize(value)
@value = value
@left = nil
@right = nil
end
def insert(value)
if value <= @value
@left.nil? ? @left = Node.new(value) : @left.insert(value)
elsif value > @value
@right.nil? ? @right = Node.new(value) : @right.insert(value)
end
end
end
def initialize
@root = nil
end
def insert(value)
@root.nil? ? @root = Node.new(value) : @root.insert(value)
end
end
我找到了其他语言的答案,但不幸的是 Ruby 没有。
【问题讨论】:
-
你是什么意思,你找到了其他语言的答案,但没有找到 Ruby?逻辑完全一样。您在实施过程中面临的具体障碍是什么?
-
@Amadan 我是一名初学者并试图理解递归。虽然我确实了解原理,但我无法将其他语言的解决方案转换为 Ruby...
-
一个节点的总和是该节点的值加上所有非零子节点的总和,对吧?至少试着把它翻译成代码,然后我们可以谈谈它有什么问题,如果有的话。
-
一个好的开始是添加一个树的例子(并显示所需总和的值)。由于还没有答案,您可能会考虑删除问题,编辑以澄清并添加示例,然后取消删除。这样您就不会感到完成编辑的时间压力,也不会在编辑时吸引更多的反对票或关闭投票。 SO 有一条规则,对于家庭作业问题(不是暗示这是一个),提问者应该解释他/她为解决问题所做的努力。这不一定需要代码。这可能是一个好问题。
-
回复:“节点的总和是节点的值加上所有非零子节点的总和,对吗?至少尝试将其转换为代码”。这是我在 BST 类中尝试的内容:
def sum(node=@root) return if node.nil? total += node.value sum(node.left) sum(node.right) end但是它会抛出“NoMethodError: undefined method `+' for nil:NilClass”。这就是我卡住的地方。
标签: ruby sum binary-tree