首页 > 解决方案 > 在无序遍历二叉搜索树时感到困惑

问题描述

只是在递归遍历BST时有点困惑,遍历的类型是有序的。这是代码。如果给定一个块,则该方法将节点生成给该块。现在我迷失了阵列。令人困惑的是,当它完成后转到最左边的节点。它将它添加到数组中,假设最左边的节点没有右子节点,当最左边的节点将控制权返回给父节点/方法时,最左边的节点值仍然存在于数组中,而我从未返回数组给父母。这显然只发生在没有子节点的节点上,因为我在方法“return if node.right_node == nil && node.left_node == nil”末尾放置了返回语句,这导致当前帧返回所以它不应该正确返回修改后的数组,

def inorder(node=root,array=Array.new)
   inorder(node.left_node,array) if has_left(node)

    if block_given?
      yield(node.value)
    else
      array << node.value
    end

    inorder(node.right_node,array) if has_right(node)
    return if node.right_node == nil && node.left_node == nil
    return array if !block_given?
  end

标签: ruby

解决方案


推荐阅读