- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2012-04-20 11:41 编辑
walleeee 发表于 2012-04-19 17:06
回复 33# yulihua49
下面的函数可以解决这个问题,但效率?等于是排序了。- //bt为根结点的指针,返回值为bt的节点数
- // context为应用提供的上下文数据,由counter使用
- //counter由应用提供,判断是否符合计数条件,不符合返回0.
- int BB_Tree_Count(T_Tree * bt,void *context,
- int (*counter)(T_Tree *bt,void *context))
- {
- return !bt?0:(BB_Tree_Count(bt->Left,context,counter) +
- ((counter)?counter(bt,context):1) +
- BB_Tree_Count(bt->Right,context,counter));
- }
复制代码 这个函数解决了 select count(*) from tree 的问题,也是内存数据库的一个核心组件。
它正序调用counter,你的counter把结果放在context里就是了。 |
|