繁体   English   中英

Ruby对二进制搜索树的使用是否错误?

[英]Is this use of Ruby wrong for a binary search tree?

我试图在Ruby中为二进制搜索树编写一个快速实现,这是我在学习新的编程语言时通常会写的一种数据结构。

在计算机上运行它时,出现堆栈太深的错误。 我想知道我的代码是否有问题,或者我是如何运行它的?

class Node
  attr_accessor :data, :left, :right
  def initialize(d)
    @data = d
    @left = Node.new(nil)
    @right = Node.new(nil)
  end
end

class BST
  attr_accessor :root
  def initialize
    @root = nil
  end

  def add_recursive(r, d)
    if r == nil
      r = Node.new(d)
    else
      add_recursive(r.right, d) if d > r.data
      add_recursive(r.left, d) if d < r.data  
    end
  end

  def add(darg)
    add_recursive(@root, darg)
  end

  def pr(r)
    if (r.left != nil)
      pr(r.left)
    end
    print "#{r.data}"
    if (r.right != nil)
      pr(r.right)
    end
  end
end

bb = BST.new
bb.add(100)
bb.add(0)
bb.add(-100)
bb.pr(bb.root)``

我想知道在此实现中我做错了什么,因为我确实运行了一些简单的测试,而访问数据变量的使用却给我带来了问题。 谢谢你的帮助

您在这里遇到了多个问题,但是您在Node#initialize第一个Node.new(nil)调用发生了无限递归。 另一个问题是,在将@root初始化为nil之后,您再也不会在BST更新@root了。 add_recursive您对r的赋值对@root

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM