最近需要使用到树结构,想在STL中找个现成的,结果没找到,怪哉!树也是常用数据类型啊,STL居然不提供?于是,又奔BOOST去找,结果还是没找到.于是,我就奇怪了,为什么这些库,都不提供树这个类型呢?
STL中不提供树,首先,这绝对不是STL设计者的疏忽,因为map就是通过平衡二叉树来实现的.
于是,我尝试着用STL的元素,来自己写一颗树,却发现,其实,STL中根本就不需要树,或者说,它已经隐性实现了树.
定义节点:
class CTreeNode
{
public:
Type Data;
vector< CTreeNode > Children;
}
这个节点一出来,相信诸位也就明白了,这已经是一颗树了.
或许还有人会有疑问,你这不是啥方法都没封装吗?
是的,没有封装任何方法.你或许需要封装一些方法,但这绝对不是STL需要单独实现树这种类型的理由.
树最最常用的操作,是添加节点和遍历节点.而像查询删除之类的操作,其使用频率比这两个也要少许多.
如果要封装上面四个操作,你会发现,其实使用起来,其方便程度,还远不如直接把Children暴露出来,让需要树的对象去直接操纵它.
STL,我个人认为,解决的最大问题,是内存管理(虽然它没有完全优美地解决).而上述的树,通过vector(其实set,list也都可以,但vector还是常用些),我们已经不需要那么费劲去考虑内存的分配与释放的问题,那么,我们还需要自己用指针写颗树吗?完全没有必要.
我也是看到网上有人专门写了个树结构,才有此感想,写下此文.但本人确实还是一菜鸟,若说得有什么不对,敬请指正,谢谢!