Ruby 查找二叉树的最深节点

Ruby 查找二叉树的最深节点,ruby,Ruby,我有一个height方法,可以找到二叉树的高度,但不确定如何返回二叉树最深的节点(如果深度相同,则返回多个节点) 其中叶表示空 此树的高度为2,最深的节点为2,3(相同深度) 假设: 二叉树实际上是根节点 child_nodes以数组形式返回子节点的集合 类二进制节点 属性读取器:元素 def初始化(元素、lchild、rchild) @元素,@lchild,@rchild=element,lchild,rchild 结束 def高度 如果@lchild.nil?&&@没有? 返回0 其他

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

其中叶表示空

此树的高度为2,最深的节点为2,3(相同深度)

假设:

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

类二进制节点
属性读取器:元素
def初始化(元素、lchild、rchild)
@元素,@lchild,@rchild=element,lchild,rchild
结束
def高度
如果@lchild.nil?&&@没有?
返回0
其他的
[@lchild,@rchild]。收集{n}n.nil?0:n.height+1}.max
结束
结束
def\u节点
如果self.height==1,则返回[self]
[@lchild,@rchild]。选择{n |!n.nil?&(n.height==self.height-1)}。收集{n | n.deep_节点}。展平
结束
结束

重构:

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 } 
struct节点//结构类型
{
int数据;
结构节点*左、*右;
};
来自main()
{
deepest节点=最大深度(根);
}
//返回类型//函数名//
结构节点*MaxDepth(结构节点*temp,int-depth)
{  
如果(临时->下一步!=NULL&&temp->right!=NULL)
{
最大深度(温度->左侧,深度+1);
最大深度(温度->右侧,深度+1);
}
否则如果(临时->左==NULL&&temp->右!=NULL)
最大深度(温度->右侧,深度+1);
如果(临时->左!=NULL&&temp->右==NULL),则为else
最大深度(温度->左侧,深度+1);
else//temp->left==NULL&&temp->right==NULL
{

如果(maxCan你能添加一些上下文吗?这是一个模糊的示例,并不清楚你需要什么。一些具有预期输出的输入应该足够了。我想找到二叉树的最深节点。我们对你的实现一无所知。如果你能提供更详细的上下文,我们可能能够提供更好的解决方案。我可以尝试给你一个但是假设有很多东西。谢谢,我有一个binarynode类,它有三个参数。node、left child和right child。我一直在研究如何找到最深的节点。只能找到树的高度。我编辑了代码。非常感谢。我解释得不太好。我添加了一个示例。@John,这是使用l/r child的示例(假设它们可以是nil或BinaryNode的实例)次要的挑剔:我可能会将
深度
重命名为
高度
,因为节点的深度通常是其与根的距离。@Phrogz recap:你说得对。我们确实需要一个BinaryTree类来确保其正常运行。不确定在使用上述示例时,最深的_节点为什么输出内存地址##
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 } 
struct node //structure type
{
    int data;
    struct node *left,*right;
};

from main()
{
    Deepestnode= MaxDepth(root);
}

//return type// function name//
struct node*    MaxDepth (struct node* temp, int depth)
{  
    if(temp->next!=NULL && temp->right!=NULL)
    {
        MaxDepth(temp->left ,depth+1);
        MaxDepth(temp->right,depth+1);
    }
    else if(temp->left==NULL && temp->right!=NULL)
        MaxDepth(temp->right,depth+1);
    else if(temp->left!=NULL && temp->right==NULL)
        MaxDepth(temp->left,depth+1);

    else // temp->left==NULL &&temp->right==NULL   
    {
        if(max<depth)
        {
           max=depth;
           Deepestnode=temp;
        }
        return(Deepestnode);
     }
}