树的定义
Posted 勇士后卫头盔哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了树的定义相关的知识,希望对你有一定的参考价值。
前言
树是一种非线性的数据结构,树是由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>
public:
bool insert(TreeNode<T>* node)
bool ret = true;
return ret;
bool insert(const T& e,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
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
GTreeNode.h
#ifndef GTREENODE_H
#define GTREENODE_H
#include "Tree.h"
#include "LinkList.h"
namespace CGSLib
template <typename T>
class GTreeNode : public TreeNode<T>
public:
LinkList< GTreeNode<T>* > child;
;
#endif // GTREENODE_H
以上是关于树的定义的主要内容,如果未能解决你的问题,请参考以下文章