当前位置: 首页 > 知识库问答 >
问题:

在Ruby树上concatAll

蓟辰沛
2023-03-14

我有两个班级叶子

我正在尝试编写一个concatAll方法,它将从左到右返回树中所有单词的字符串……

下面是我到目前为止所得到的,但是它只返回它找到的最后一个字符串,而不是已经构建好的整个字符串...怎么会这样

def concatAll
 final = ""

 if @lchild.respond_to?('string')   
   final += @lchild.to_s
 else
   @lchild.concatAll unless @lchild.nil?
 end

 if @rchild.respond_to?('string')   
   final +=  @rchild.to_s
 else
   @rchild.concatAll unless @rchild.nil?
 end
end

共有2个答案

方博学
2023-03-14

我发现我需要final =在递归调用的前面,当它返回树的时候。

def concatAll
 final = ""

 if @lchild.respond_to?('string')   
    final += @lchild.to_s
 else
   final += @lchild.concatAll unless @lchild.nil?
 end

 if @rchild.respond_to?('string')   
   final +=  @rchild.to_s
 else
   final += @rchild.concatAll unless @rchild.nil?
 end

 final
end

特别感谢马克·托马斯

潘俊
2023-03-14

方法的返回值是最后执行的表达式的值。如果没有显式返回值,您只是找到了最后一个字符串。

您可以简单地在结束之前添加一行:

  final
end

这将返回最终的值。

 类似资料:
  • 我正在研究一种递归算法,将二叉树扁平化为单链表。问题陈述: 我写了下面的递归代码,它根本不起作用(返回错误的答案),但我不能从概念上理解为什么不起作用。从根开始,我们拉平根。左根和右根。如果root.left存在,那么root.next(在本例中是root.right)将指向扁平化的left列表。然后,左列表指向右列表的开始。这将沿着树递归地继续下去。 这在概念上有问题吗?我尝试在预序遍历之后对它

  • 问题内容: 我正在使用redis作为读取缓存。我已经创建了一个初始化器 config / initializer / redis.rb 每当创建新工作线程时,我都会在unicorn.rb中使用此全局变量来创建新连接。 每当我需要访问我的Redis服务器时,我也会使用此全局变量。但是我不习惯使用这个全局变量。有没有比使用全局变量更好的选择? 问题答案: 进一步扩展方法建议,如下所示在初始化器中命名模

  • 本文向大家介绍Ruby环境设置| 在Mac和Windows操作系统上安装Ruby,包括了Ruby环境设置| 在Mac和Windows操作系统上安装Ruby的使用技巧和注意事项,需要的朋友参考一下 Ruby环境设置 1)在Mac操作系统上安装Ruby Ruby已包含在默认的macOS安装中,但它不是最新版本。在以下步骤中,我们将使用Homebrew设置Ruby编程环境。您将必须使用终端应用程序提供的

  • 我正在研究数据结构,我遇到了一个难题。目标是根据数组元素的值将数组元素插入到二叉搜索树中,即(主树的根节点为数组[0],左子树的根_node小于父节点,右子树的根节点大于父节点)。这将递归进行,直到所有数组元素都插入BST。 我实现了两个类: 这表示具有属性的节点(数据,左,右): 是BST的私有方法,它执行将节点插入树的实际工作。我将其与分开,因为需要使用RSpec评估的预期解决方案。 然后,我

  • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,