《算法导论》第14章 数据结构的扩张 (2)
2012-04-09 23:03 htc开发 阅读(174) 评论(0) 编辑 收藏 举报
在上一节中,我们为树结点添加size域表示每颗子树的大小,即包含的结点个数,扩张了
二叉查找树为其增加顺序统计量的查找功能。更为自然的想法是直接添加顺序统计量rank域
到每个树结点上。这一节我们就来看下在这样的设计下,如何扩张来完成上一节相同的功能。
当我们插入一个结点到二叉树中,假设它的顺序统计量为5,那么之前二叉树中顺序统计量
大于5的结点都要更新。也就是说插入一个新结点到对应的位置后,要不断地查找其后继,
完成rank域的更新。所以可以结合习题14.2-1,再添加两个指针域prev和next指向前趋和后继,
使查找前趋和后继在O(1)内完成。
下面来看具体代码。
通过这一节和上一节的对比,可以看出在步骤(2)中对基础数据结构添加不同的域,会对
步骤(3)和(4)改写和添加新的操作产生很大影响。因此,在扩张数据结构时可以采用
试错法,尝试添加不同的域,权衡各种方案的优劣。