init -> down : 从length/2-1 开始, 往前迭代down

1 2 3 4 4/2-1 = 1

1 2 3 3/2-1 = 0

1 2 3 4 5 6

6

5 3 4 2 1

6/2-1 = 2

0 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 10

left: 2n+1 right: 2n+2

parent: (n-1)/2

Push: 将元素放到完全二叉树的叶子节点, 然后用改节点执行up Pop: 将0 index 元素与完全二叉树最后一个叶子节点交换, 并去除该节点, 之后用根节点(被替换上来的完全二叉树的叶子节点) 做 down down: 当前节点与更"小"的子节点交换, 如果发生交换, 继续迭代被交换的子节点 up: 当前节点与更"小"的父节点节点交换, 如果发生交换, 继续迭代被交换的父节点 Fix: 当前节点执行down, 如果没发生down(子树都比它小), 那就检查是否需要up Remove: 类似Pop, 不过是用索引 i 的元素与完全二叉树的最后一个叶子节点交换, 然后 Fix 索引 i 的元素, 最后做 Pop