65.9K
CodeProject 正在变化。 阅读更多。
Home

类似STL的树类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.13/5 (13投票s)

2002 年 5 月 29 日

1分钟阅读

viewsIcon

114987

downloadIcon

1718

一个使用map和vector的多节点树类。

Sample Image

引言

一年多以前,我需要使用某种多节点树来完成一些事情。然而,我在互联网上找到的都是二叉树或等效结构。因此,我决定自己编写一个。由于我需要尽快完成它,我只花了两天时间,所以可能存在错误。

在这个项目中,有三个类以 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() 删除树的一部分。

不幸的是,我没有太多时间准备这份文档,但应该很明显如何使用这些类。

© . All rights reserved.