1 2 3 4 5 6 7 8 9 10 11 12 13 14 | private void siftDown(Integer index){ //获取出左边孩子和右边孩子的节点索引 Integer leftIndex = leftChild(index); if (leftIndex > array.getSize()- 1 ) return ; Integer rightIndex =rightChild(index); if (rightIndex > array.getSize()- 1 ) return ; if (array.get(leftIndex).compareTo(array.get(index)) > 0 ){ array.swap(leftIndex,index); siftDown(leftIndex); } else if (array.get(rightIndex).compareTo(array.get(index))> 0 ){ array.swap(rightIndex,index); siftDown(rightIndex); } } |
使用递归更好理解一点。
登录后可查看更多问答,登录/注册