树的属性操作
树的属性操作具体指的就是树中结点的数目,树的高度,树的度数等…
1.树中结点的数目
查找树中结点数目的操作是递归完成的,是递归就有递归出口,当结点为空或者结点的子链表长度为0时就为递归出口,上图就是递归公式的提炼,我们看到下图,要求出该树的结点数可以分为3个部分,count(B)表示求以B为根结点的树的结点数,count©表示求以C为根结点的树的结点数,count(D)表示求以D为根结点的树的结点数,看得count(A)的同时又用到count©这就是一个递归调用的过程
代码演示
int count(GTreeNode<T>* node)const
{
int ret = 0;
if(node!=NULL)
{
ret = 1;
for(node->child.move(0);!node->child.end();node->child.next())
{
ret+=count(node->child.current());
}
}
return ret;
}
结果:
13
2.树中的高度
求树中的高度也是递归调用的,树中的高度等于其子树的高度的最大值+1,递归公式如下所示
int height(GTreeNode<T>* node)const
{
int ret = 0;
if(node!=NULL)
{
for