C++的标准模板库中并没有n-叉树的实现,boost库中到目前为止也没有这样的作品。这里要介绍的由德国人Kasper Peeters实现的n-叉树C++模板,经过长期持续不断的修正,该n-叉树的C++模版已经非常完善,值得一用。关于这个软件可访问网站http://tree.phi-sci.com/。下面是库文档tree.pdf的翻译,不确之处敬请斧正。
tree.hh文档
摘要
基于C++的tree.hh库提供了针对n-叉树的类STL容器,并对存储于节点内的数据实现了模板化。库提供了不同的迭代器类型,比如前序、后序或其它方式,访问方法和STL尽可能保持一致,并有相应的算法可供选用。
代码和例子可访问网站http://tree.phi-sci.com/
注意这个文档并不能完全涵盖库的内容,若想了解库的所有成员请参考头文件tree.hh。
1. 概述
1.1 容器类
tree.hh的树类是一个秉承STL精神的模板化的容器类。它是通过所谓的n-叉树来组织数据,每个节点连接任意数量的孩子节点。同级的节点互称“兄弟节点”,给定节点下面的节点称为“孩子节点”,而该节点称为这些孩子节点的“父节点”。在树的顶端有多个节点,它们都没有父亲,这些节点的集合称为树的头。见图1(习惯上旋转90度)。
图1 树结构概览
树类对于存储于节点内的数据做了模板化,就像你原来可以vector<string>而现在可以tree<string>。许多工作在数据结构上的STL算法,作为必要的选择这里也提供了。
先序 (默认) | 在孩子节点之前 | pre_order_iterator | root A B C D E F |
后序 | 在孩子节点之后 | post_order_iterator | B C A E F D root |
广度优先 | breadth_first_iterator | root A D B C E F | |
兄弟 | 仅遍历兄弟 | sibling_iterator | (例如) A D |
固定深度 | fixed_depth_iterator | (例如) A D | |
叶子 | leaf_iterator | B C E F |