d-heap的子节点与父节点关系

来源:互联网 发布:三分屏录制软件 编辑:程序博客网 时间:2024/06/03 20:20

D-heap就是D叉堆,也就是说有d个子节点的堆

如何确定第i个节点的子节点和父节点的序号呢?

我们不妨假设第一个节点就是1,那么第一个子节点就是1*d-d+2(即2),最后一个子节点就i*d+1(d+1个)

显然,我们假设的1对于子节点的推断没有影响,那么对于第i个节点,它的第一个子节点就是i*d-d+1,最后一个子节点就i*d+1

如果求父节点呢?根据子节点的关系,我们能发现,如果直接用i/d,那么对于第一个子节点,这个数字是    k-1(假设k为父节点的编号,d>2),对于最后一个子节点这个数字是k,我们如果用一个offset i+d-2,那么对于第一个子节点就是(i*d-d+2 +d-2 )/d = k,最后一个节点就是(k*d+d-1)/ d = k(因为d-1/d向下取整是0)最终这个结果统一了

0 0
原创粉丝点击