ruby - 查找二叉树的最深节点

标签 ruby

我有一个高度方法可以找到二叉树的高度,但不确定如何返回二叉树的最深节点(如果深度相同则返回多个节点)。

BinaryNode.new(1,BinaryNode.new(2,leaf,leaf),BinaryNode.new(3,leaf,leaf))

其中叶子代表空

这棵树的高度是2,最深的节点是2,3(相同深度)

class BinaryNode 
  include Enumerable
  def initialize(element,lchild,rchild)
    @element, @lchild, @rchild = element, lchild, rchild
  end
  def deepestNode
    if self.nil?
      0
    else
      height1=@lchild.height+1
      height2=@lchild.height+1
    end
      height=[height1,height2].max
      height
    end
  end
end

最佳答案

假设:

  • 二叉树其实就是根节点
  • child_nodes 以数组的形式返回子节点的集合

class BinaryNode
  attr_reader :element

  def initialize(element,lchild,rchild)
    @element, @lchild, @rchild = element, lchild, rchild
  end

  def height
    if @lchild.nil? && @rchild.nil?
      return 0
    else
     [@lchild, @rchild].collect {|n| n.nil ? 0 : n.height + 1 }.max      
    end
  end

  def deepest_nodes
    return [self] if self.height == 1

    [@lchild, @rchild].select {|n| !n.nil? && (n.height == self.height - 1)}.collect {|n| n.deepest_nodes}.flatten
  end
end

重构:

class BinaryNode
  attr_reader :element

  def initialize(element,lchild,rchild)
    @element, @lchild, @rchild = element, lchild, rchild
  end

  def child_nodes
    [@lchild, @rchild].compact
  end

  def height
    if self.child_nodes.empty?
      return 0
    else
      self.child_nodes.collect {|n| n.height + 1 }.max      
    end
  end

  def deepest_nodes
    return [self] if self.depth == 1

    self.child_nodes.select {|n| n.height == self.height - 1}.collect {|n| n.deepest_nodes}.flatten
  end
end

获取元素:

BinaryNode.new(1,BinaryNode.new(2,leaf,leaf),BinaryNode.new(3,leaf,leaf)).deepest_nodes.collect {|n| n.element } 

关于ruby - 查找二叉树的最深节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13091114/

相关文章:

mysql - 在时间戳内获取记录但不特定于日期

ruby - 如何从模块或类继承默认数据

ruby-on-rails - 如何使用 RestClient 修复 Ruby 中的套接字错误?

ruby-on-rails - 推送到 Heroku 时应用程序的位置

ruby - 如何逐行读取 gzip 文件?

html - 如何将方法的返回结果包装到一个div block 中

ruby - 在 Ruby 中,插入字符串的数据是否会导致字符串终止?

ruby-on-rails - Rails 3 中的断言差异

ruby - Ruby 中的 "and"、 "or"运算符背后有什么智慧吗?

javascript - 不确定如何处理 javascript 并在此特定实例中进行 Mechanize