Java的顺序布局的特点_基于深度优先顺序而不是宽度优先,我可以为完整树构建类似堆的连续布局吗?...

我只是想了一下 .

中缀订单怎么样?这样一切都更容易计算:

bool is_leaf(unsigned int i){

return !(i%2);

}

unsigned int left_child(unsigned int i){

return i - pow(2,num_levels - level(i));

}

unsigned int left_child(unsigned int i){

return i + pow(2,num_levels - level(i));

}

int level(unsigned int i){

unsigned int offset = 1;

unsigned int level_bits = 1;

int level = 0;

while ((i - offset)&level_bits == 0){

level++;

offset += pow(2,level);

level_bits = (level_bits << 1) + 1; /* should be a string of trailing 1s */

}

return level;

}

这样你只能在最顶层的节点上获得大跳跃 . 之后,跳跃呈指数级变小 . 这样做的好处在于,由于较低级别的节点较少,因此可以缓存这些节点 . 在树更密集的地方(即更多的同伴),跳跃要小得多 .

退回是插入缓慢:

void insert_node(node[] node_array, node new_node){

for (unsigned int i = num_nodes-1; i >= 0; i--){

node_array[i*2 + 1] = node_array[i];

node_array[i] = NULL_NODE_VALUE; /* complete (but not full) trees are discontiguous */

}

node_arry[0] = new_node;

}

这个中缀顺序无疑比前缀(深度优先搜索)顺序要好得多,因为树在逻辑上和物理上都是“ balancer 的” . 在前缀顺序中,左侧更受青睐 - 所以它会有所表现无论如何,像一棵不 balancer 的树 . 至少使用中缀,您可以在密集节点之间进行 balancer 和快速搜索 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值