树——通用树的存储结构与结点实现
1,上篇博文介绍了树的定义和相关概念定义,本节课创建树对象和树结点对象;
2,课程目标:
1,完成树和结点的存储结构设计:
1,没有树结点,就没有树,同生死;
3,设计要点:
1,GTree 为通用树结构,每个结点可以存在多个后继结点;
2,GTreeNode 能够包含任意多指向后继结点的指针;
3,实现树结构的所有操作(增,删,查,等);
1,抽象类只用包含功能函数,具体的对象才包含成员变量和实现功能函数;
4,GTreeNode 的设计与实现:
1,组合单链表类,因为要包含任意多指向结点的指针:
5,GTree 的设计与实现:
1,继承抽象树及组合使用通用结点:
6,GTree(通用树结构)的实现架构:
1,后继表示方式是指针,指针通过单链表组织;
2,包含指向父结点的指针;
7,通用树结点的创建:
1,通用树结点 GTreeNode 的创建:
1 #ifndef GTREENODE_H 2 #define GTREENODE_H 3 4 #include "TreeNode.h" 5 #include "LinkList.h" 6 7 namespace DTLib 8 { 9 10 template < typename T > 11 class GTreeNode : public TreeNode<T> 12 { 13 public: 14 LinkList<GTreeNode<T>*> child; 15 16 static GTreeNode<T>* NewNode() // 工厂模式 17 { 18 GTreeNode<T>* ret = new GTreeNode<T>(); 19 if( ret != NULL ) // 申请堆空间成功 20 { 21 ret->m_flag = true; 22 } 23 24 return ret; 25 } 26 }; 27 28 } 29 30 #endif // GTREENODE_H
2,通用树 GTree 的创建:
1,见后续通用树相关博文;
9,每个树结点中为什么包含指向前驱结点的指针?
1,根结点 ==> 叶结点:非线性数据结构;
2,叶结点 ==> 根结点:线性数据结构(链表);
1,每个结点通过 parent 指针都能找到唯一的父结点,于是每个叶结点都能够通过 parent 指针找到唯一的根结点,这是线性的链表结构;
2,可以用树相关的知识,也可以用链表相关的知识处理树的问题;