1. use a backreference to keep track of nodes instead of swapping childrens - faster because we only need to swap values and backreferences - additional memory used 2. implementation only supporting push pop and merge