前言
树是一种非线性的数据结构,树是由n(n>=0)个结点组成的有限集合,如果n=0称为空树,如果n>0则包含根结点,根结点只有直接后继,但没有直接前驱,除根以外的其他结点划分为m(m>=0)个互不相交的有限集合T0,T1…Tm-1,每个集合又是一颗树,并且称之为根的子树(sub tree),可以看出树也是递归的一种
树中度的概念
1.树的结点包含一个数据及若干指向子树的分支
2.结点拥有的子树数目称为结点的度
度为0的结点称为叶结点
度不为0的结点称为分支结点
3.树的度定义为所有结点中度的最大值
如上图所示,K结点的度为0,H结点的度为1,A结点的度为3,所以该树的度为3
树中的前驱和后继
1.结点的直接后继称为该结点的孩子,相应的该结点称为孩子的双亲
2.结点的孩子的孩子的....称为该结点的子孙,相应的该结点称为子孙的祖先
3.同一个双亲的孩子之间互称兄弟
入上图所示,K和L为兄弟,A为BCD的双亲,D为HIJS的双亲,特别注意的是树中结点的最大层次称为树的深度或高度,即上述树的高度为4
树的存储与定义
上图是树的类图,GTree为通用树结构,每个结点可以存在多个后继结点,GTreeNode能够包含任意多指向后继结点的指针,实现树结构的所有操作,GTree的实现架构如下所示
GTree.h
#ifndef GTREE_H
#define GTREE_H
#include "Tree.h"
#include "GTreeNode.h"
namespace CGSLib
{
template <typename T>
class GTree : public Tree<T>
{