首先,什么是树呢?
数的定义是递归的:
定义树是满足以下条件的,包含至少一个结点的有限集合:
(1)树中有一个特别指定的结点,称为根,或树根。
(2)其它结点划分成n>=0个不相交的集合T1…Tn ,每个集合又还是一棵树,但称为根的子树。
树的主要操作包括:求树的深度、求给定节点的子节点、兄弟节点、遍历树、插入子树、删除子树等等。因为树的定义本身就是递归的,所以在实际的程序中,很多操作也是通过递归来完成的。
树是如何表示的呢?有一种常用的表示方法,成为孩子、兄弟表示法,对于每个节点,通过孩子指针指向自己的子节点,通过兄弟指针指向自己右边的兄弟。
typedef char ElemType;
//通过第一个孩子和下一个兄弟来确定整个树
typedef struct TNode
{
ElemType data;
TNode *firstChild,*nextSibling;
}TNode,*Tree;
//初始化一个节点
Tree initTree(ElemType e)
{
Tree pT;
pT = (TNode*)malloc(sizeof(TNode));
pT->firstChild = NULL;
pT->nextSibling = NULL;
pT->data = e;
return pT;
}
//删除树
void deleteTree(Tree *T)
{
if(NULL == *T)
return ;
deleteTree(&(*T)->nextSibling);
deleteTree(&(*T)->firstChild);
free(*T);
*T = NULL;