类似STL的树类






4.13/5 (13投票s)
2002 年 5 月 29 日
1分钟阅读

114987

1718
一个使用map和vector的多节点树类。
引言
一年多以前,我需要使用某种多节点树来完成一些事情。然而,我在互联网上找到的都是二叉树或等效结构。因此,我决定自己编写一个。由于我需要尽快完成它,我只花了两天时间,所以可能存在错误。
在这个项目中,有三个类以 STL 容器-迭代器风格工作。template <class Key, class T> class Tree template <class Key, class T> class Tree_iterator template <class Key, class T> class TreeNode
一棵树包含许多树节点,而树节点包含数据。树的树节点被称为子节点。在设计中,每个节点都被分配一个层级,根节点层级为 1。Tree_iterator
用于在树中导航。定义了两种树的遍历方式。一种从根节点向下遍历,另一种使用后序风格遍历树的所有子节点。对于每次遍历操作,都会返回一个 tree_iterator
,以便用户可以使用迭代器引用树节点并获取数据。
我将所有类包装在 Tiffany 命名空间下。例如,声明具有 wstring
键类型和 string 数据类型的树,并添加两层元素如下:
Tiffany::Tree<wstring, string> x(L"Node 1", "Root"); px = x.AddChild(L"Key1","A"); px1 = x.AddChild(px, L"Key2", "1");
对于向下遍历操作,您可以使用函数 SetSubTreePivot(px)
将其限制在树的一部分(“子树”)内,并且可以通过调用 SetWalkDownRootPivot 将枢轴设置回根节点。 试试看! 您甚至可以通过调用 DelSubTree()
删除树的一部分。
不幸的是,我没有太多时间准备这份文档,但应该很明显如何使用这些类。