GeneralTree 一般树形结构类

来源:互联网 发布:淘宝客推广效果怎么样 编辑:程序博客网 时间:2024/05/16 01:28

这个类用于一般树形,每个节点可以有多个分支,且数目不定。

可以看做是二叉树的变形形式。一个节点除了父指针外还有左右两个指针。

左指针为孩子节点的起始指针,右指针为同父节点的兄弟节点的指针

例如:

A的左指针为B,右指针为C,C的左指针为E,右指针为D

则,A,C,D为同兄弟节点。B为A的子节点,E为C的子节点。

这里使用到了GeneralTreeNode类

这个树没有delete操作。因为我暂时不知道这个树类在什么地方会用到delete操作。而且这个树的查找是O(n),相比与排序二叉树那是慢的太多了。不过这个树在未知每个节点的分叉个数时,可以使用。其他的地方,个人认为还是尽量使用其他树形。

这个GeneralTree类还要进行大量的改进。

另外因为继承的缘故,这里大量使用dynamic_cast<>()方法。为了将GeneralTreeNode类转变为TreeNode类。这里我暂时还是不知道有什么好的方法。

另外注意这里的Print函数,必须传入一个函数指针。因为树不知道你的打印数据方法和格式,其实我这里想了很多,最后感觉还是这种方法好点。感觉应该在TreeNode类中添加一个virtual Print()函数来负责data的打印工作。

开始的时候,想过使用模板的方法,在TreeNode中添加一个模板参数。后来发现这样做对数据控制不利,而且我要改动非常多的代码,不如直接在GeneralTreeNode类中添加一个virtual Print()函数,然后传入指针参数去控制打印。

当然这样做的缺点在于如果还有类继承了TreeNode,而且也需要有print data 的方法。那么代码还要改动。但是现在的需求并没有看出这样做的趋势..所以暂时还是在GeneralTreeNode类中添加一个virtual Print()函数.

具体代码如下:

这里可能还需要一个List.h文件,大家可以使用stl中的代替,也可以自己写,也可以使用我的..