1、课程目标
完成树和结点的存储结构设计
设计要点
- GTree为通用树结构,每个结点可以存在多个后继结点
- GTreeNode能够包含任意多指向后维结点的指针
-实现树结构的 所有操作(增,删,查,等)GTreeNode的设计与实现
GTree的设计与实现
GTree (通用树结构)的实现架构
2、编程实验
通用树结构的创建 GTree.hGTreeNode.h
#ifndef GTREENODE_H #define GTREENODE_H #include "TreeNode.h" #include "LinkList.h" namespace DTLib { template < typename T > class GTreeNode : public TreeNode<T> { public: LinkList< GTreeNode<T>* > child; }; } #endif // GTREENODE_H
GTree.h
#ifndef GTREE_H
#define GTREE_H
#include "Tree.h"
#include"GTreeNode.h"
namespace DTLib
{
template < typename T >
class GTree : public Tree<T>
{
public:
bool insert(TreeNode<T>* node)
{
bool ret = true; //这里先写框架,后续课程完善
return ret;
}
bool insert(const T& value,TreeNode<T>* parent)
{
bool ret = true;
return ret;
}
SharedPointer< Tree<T> > remove(const T& value)
{
return NULL;
}
SharedPointer< Tree<T> > remove(TreeNode<T>* node)
{
return NULL;
}
GTreeNode<T>* find(const T& value) const //GTreeNode 赋值兼容原则
{
return NULL;
}
GTreeNode<T>* find(TreeNode<T>* node) const
{
return NULL;
}
GTreeNode<T>* root() const
{
return dynamic_cast< GTreeNode<T>* >(this->m_root);
}
int degree() const
{
return 0;
}
int count() const
{
return 0;
}
int height() const
{
return 0;
}
void clear()
{
this->m_root = NULL;
}
~GTree()
{
clear();
}
};
}
#endif // GTREE_H
main.cpp
#include <iostream> #include"GTree.h" using namespace std; using namespace DTLib; int main() { GTree<int> t; GTreeNode<int> tn; return 0; }
!!!由于之前在
class GTreeNode : public TreeNode<T>
在这里忘记public导致下面情况o((⊙﹏⊙))o.简直怀疑人生
根据错误信息可以推测可能是GTreeNode继承TreeNode出问题了,
扫了一眼继承了下意识忽略了public (;´д`)ゞ
3、问题
每个树结点中为什么包含指向前驱
结点的指针?
根结点 --> 叶结点:非线性数据结构
叶结点 --> 根节点:线性数据结构(链表)
4、实战预告
思考:
如何实现GTree (通用树结构)的结点查找操作?