ruby - 在无序遍历二叉搜索树时感到困惑
问题描述
只是在递归遍历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
解决方案
推荐阅读
- wordpress - 从 WooCommerce 属性存档页面的面包屑中删除单词“产品”
- javascript - 未捕获的类型错误:无法读取未定义的属性 NaN
- android - 在两个 Fragment 之间共享 ViewModel 中 MutableStateFlow 的冷流
- javascript - JavaScript将json添加到现有对象
- jmeter - 如何在命令行模式下为远程服务器设置线程数
- php - 更改mysql上的加密密码
- spring - Spring WebClient toFuture() 与 block() - 主要区别是什么?
- python - scikit-learn:从 sklearn.datasets.fetch_lfw_pairs() 获取原始图像大小
- python - Python搁置不保存嵌套键
- mysql - 股票 mySQL DB,每个 Ticker 有 7 个表