为了防止二叉搜索树中性能大大降低的最坏情况出现,我们可以采用一些方法,如:随机化、发散化和最优化来使其达到平衡。
下面函数使用分区函数在线性时间内使一棵二叉搜索树达到完美平衡状态。我们先划分以便把中值节点放入树根,然后(递归地)对子树执行同样的操作。
1 void balanceR(link& h) 2 { 3 if ((h == 0) || (h->N == 1)) return; 4 partR(h, h->N/2); 5 balanceR(h->l); 6 balanceR(h->r); 7 }