构建堆的树节点
用于构建堆的树节点需要有如下几个属性:
- value 值
- parent 指向父节点
- leftchild 指向左子节点
- rightchild 指向右子节点
堆
一个堆最重要的两个方法是:
- push 增加一个元素到堆尾,并沿着路径上行到合适位置
- pop 交换堆首尾元素,取出队尾元素,将堆顶元素下行到合适位置
示例
如何根据结点的序号快速的定位结点
在堆的两个方法push
pop
需要解决如何快速地寻找队尾元素,可以采取如下的方法:
如上图,若现在堆大小为4,则插入元素位置应该在5,其二进制101表示其路径为:根节点->左子树->右子树
代码实现
1 |
|
输出结果:
中序遍历
1 3 4 2
前序遍历
4 3 1 2
4
3
2
1
补充:js实现堆排序
1 | // 调整堆 |