我通过使用节点来创建二进制树而不是数组来创建我的最大堆数据结构。 现在,我想创建一个percolate-down函数,我该如何实现这个函数?有没有其他办法,但递归工作?我正在尝试使用循环,但我的所有尝试都失败了,我希望有人可以帮助我,提前谢谢你。
答案 0 :(得分:1)
我认为这样的事情应该有效:
%// ... perform some manipulations (not affecting size) of temp
%// restructure back to the form of A
backToAForm = reshape(temp,c,r)'
递归只是思考循环的另一种方式(或者反过来说)。 递归形式的相同解决方案:
do {
var currNode = root
var maxChild = if (currNode.left.value > currNode.right.value) currNode.left else currNode.right
if (currNode.value < maxChild.value) {
val tempValue = currNode.value
currNode.value = maxChild.value
maxChild.value = tempValue
currNode = maxChild
} else {
break
}
} while (true)
编辑:需要进行更多检查以检测currNode何时是叶子并且没有子项。