//////////////////////////////////////////////////
//oneDegree()私有成员函数
//递归统计子树subTree中度为1的结点的个数
//////////////////////////////////////////////////
template<class T>
int BinaryTree<T>::oneDegree(BinTreeNode<T>* subTree)
{
//子树不空
if(subTree!=NULL)
{
//如果左右子树都不空
if(subTree->leftChild!=NULL
&& subTree->rightChild!=NULL)
//递归统计左右子树,并返回两者的和
return oneDegree(subTree->leftChild)
+oneDegree(subTree->rightChild);
//如果左不空右空,则递归统计左子树,再加上当前结点
else if(subTree->leftChild!=NULL
&& subTree->rightChild==NULL)
return oneDegree(subTree->leftChild)+1;
//如果左空右不空,则递归统计右子树,在加上当前结点
else if(subTree->leftChild==NULL
&& subTree->rightChild!=NULL)
return oneDegree(subTree->rightChild)+1;
//左右子树都是空的说明是叶子结点,返回0
else
return 0;
}
//空则返回0
else
return 0;
};
///////////////////////////////oneDegree()函数结束
//oneDegree()私有成员函数
//递归统计子树subTree中度为1的结点的个数
//////////////////////////////////////////////////
template<class T>
int BinaryTree<T>::oneDegree(BinTreeNode<T>* subTree)
{
//子树不空
if(subTree!=NULL)
{
//如果左右子树都不空
if(subTree->leftChild!=NULL
&& subTree->rightChild!=NULL)
//递归统计左右子树,并返回两者的和
return oneDegree(subTree->leftChild)
+oneDegree(subTree->rightChild);
//如果左不空右空,则递归统计左子树,再加上当前结点
else if(subTree->leftChild!=NULL
&& subTree->rightChild==NULL)
return oneDegree(subTree->leftChild)+1;
//如果左空右不空,则递归统计右子树,在加上当前结点
else if(subTree->leftChild==NULL
&& subTree->rightChild!=NULL)
return oneDegree(subTree->rightChild)+1;
//左右子树都是空的说明是叶子结点,返回0
else
return 0;
}
//空则返回0
else
return 0;
};
///////////////////////////////oneDegree()函数结束