(1)二叉树单分支结点
int SizeOneBrch(BtNode *ptr) //单分支
{
if(ptr==NULL)
{
return 0;
}
else
{
if(ptr->leftchild ==NULL&&ptr->rightchild !=NULL)
{
return SizeOneBrch(ptr->rightchild )+1;
}
if(ptr->leftchild !=NULL && ptr->rightchild ==NULL)
{
return SizeOneBrch(ptr->leftchild )+1;
}
return SizeOneBrch(ptr->leftchild )+SizeOneBrch(ptr->rightchild);
}
}
int SizeOneLBrch(BtNode *ptr) //左单分支
{
if(ptr==NULL)
{
return 0;
}
else
{
if(ptr->leftchild !=NULL && ptr->rightchild ==NULL)
{
return 1;
}
return SizeBinary(ptr->leftchild )+SizeBinary(ptr->rightchild );
}
}
int SizeOneRBrch(BtNode *ptr) //右单分支
{
if(ptr==NULL)
{
return 0;
}
else
{
if(ptr->leftchild ==NULL && ptr->rightchild !=NULL)
{
return 1;
}
return SizeBinary(ptr->leftchild )+SizeBinary(ptr->rightchild );
}
}
(2)二叉树的双分支
int SizeBinary(BtNode *ptr) //双分支结点个数
{
int n=0;
if(ptr==NULL)
{
return 0;
}
else
{
if(ptr->leftchild !=NULL && ptr->rightchild !=NULL)
{
n=1;
}
return n+SizeBinary(ptr->leftchild )+SizeBinary(ptr->rightchild );
}
}
(3)叶子结点
int SizeLeaf(BtNode *ptr) //叶子结点
{
if(ptr==NULL )
{
return 0;
}
else if(ptr->leftchild ==NULL && ptr->rightchild ==NULL)
{
return 1;
}
else
{
return SizeLeaf( ptr->leftchild )+SizeLeaf( ptr->rightchild );
}
}
(4)所有结点
int Size(BtNode *ptr) //所有结点总数
{
if(ptr==NULL)
{
return 0;
}
else
{
return Size( ptr->leftchild )+Size( ptr->rightchild )+1;
}
}
(5)树的深度
int Depth(BtNode *ptr) //树的深度
{
if(ptr==NULL)
{
return NULL;
}
else
{
return Depth(ptr->leftchild )>Depth(ptr->rightchild )?
Depth(ptr->leftchild) +1:Depth(ptr->rightchild )+1;
}
}