private static int isChildSwap(ArrayList<INode> nodeMinHeap, int i) {
		int i_parent = nodeMinHeap.get(i).getSum();
		int i_leftChild = nodeMinHeap.size() > (i * 2) + 1 ? nodeMinHeap.get((i * 2) + 1).getSum() : Integer.MAX_VALUE;
		int i_rightChild = nodeMinHeap.size() > (i * 2) + 2 ? nodeMinHeap.get((i * 2) + 2).getSum() : Integer.MAX_VALUE;
		
		if(i_parent <= i_leftChild){
			if(i_parent <= i_rightChild){
				// no swap
				return i;
			}else{
				// swap right child and parent
				swap(nodeMinHeap, i, (i * 2) + 2);
				return (i * 2) + 2;
			}
		}else if(i_parent <= i_rightChild){
			// do nothing, is correct
			return i;
		}else{
			if(i_rightChild < i_leftChild){
				// swap right child and parent
				swap(nodeMinHeap, i, (i * 2) + 2);
				return (i * 2) + 2;
			}else{
				// swap left child and parent
				swap(nodeMinHeap, i, (i * 2) + 1);
				return (i * 2) + 1;
			}
		}
	}