【算法步骤】
如果是空树,递归结束,否则进行以下操作:
void Copy(BiTree T,BiTree &NewT)
{//复制一棵和T完全相同的二叉树
if(T==NULL)//如果是空树,递归结束
{
NewT=NULL;
return;
}
else
{
NewT=new BiTNode;
NewT->data=T->data;//复制根结点
Copy(T->lchild,NewT->lchild);//递归复制左子树
Copy(T->rchild,NewT->rchild);//递归复制右子树
}//else
}
【算法步骤】
如果是空树,递归结束,深度为0,否则进行以下操作:
int Depth(BiTree T)
{//计算二叉树T的深度
if(T==NULL) return 0;//如果是空树,深度为0,递归结束
else
{
m=Depth(T->lchild);//递归计算左子树的深度记为m
n=Depth(T->rchild);//递归计算右子树的深度记为n
if(m>n) return(m+1);//二叉树的深度为m与n的较大者加1
else return(n+1)
}
}
int NodeCount(BiTree T)
{//统计二叉树T中结点的个数
if(T==NULL) return 0;//如果是空树,则结点个数为0,递归结束
else return NodeCount(T->lchild)+NodeCount(T->rchild)+1
//否则结点个数为左子树的结点个数+右子树的结点个数+1
}
int LeafNode(BiTree T)
{//统计二叉树T中叶子结点的个数
if(T==NULL)
return 0;//空树,返回0
else if(T->lchild==NULL&&T->rchild==NULL)
return 1;//叶子结点,返回1
else//递归
return LeafNode(T->lchild)+LeafNode(T->rchild)
}