siftDown函数问题
问题描述:
bobo老师,为什么
j
在 +1(变为rightChild(k)) 后 是 leftChild 和 rightChild 中的最大值? 不是等于rightChild吗?
相关代码:
private void siftDown(int k){
while(leftChild(k) < data.getSize()){
int j = leftChild(k); //j+1是右节点,不越界,说明存在
if(j + 1 < data.getSize() && data.get(j + 1).compareTo(data.get(j)) > 0)
j ++; // j = rightChild(k);
//data[j] 是 leftChild 和 rightChild 中的最大值
38
收起
正在回答 回答被采纳积分+1
2回答
liuyubobobo
2021-11-25 12:01:51
j ++ 是有条件的:
if(j + 1 < data.getSize() && data.get(j + 1).compareTo(data.get(j)) > 0)
这个条件的意思是: j + 1 没有越界 且 data[j + 1] > data[j],此时,才 j ++,
也就是右边大于左边,才 j ++。所以走完这个 if 以后,data[j] 里是 leftChild 和 rightChild 中的最大值
继续加油!:)
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星