六:二叉树中第k层节点个数与二叉树叶子节点个数
二叉树中第k层节点个数
递归解法:
(1)假设二叉树为空或者k<1返回0
(2)假设二叉树不为空而且k==1。返回1
(3)假设二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树k-1层节点个数之和
代码例如以下:
int GetNodeNumKthLevel(BinaryTreeNode *pRoot, int k)
{
if(pRoot == NULL || k < 1)
return 0;
if(k == 1)
return 1;
int numLeft = GetNodeNumKthLevel(pRoot->m_pLeft, k-1); // 左子树中k-1层的节点个数
int numRight = GetNodeNumKthLevel(pRoot->m_pRight, k-1); // 右子树中k-1层的节点个数
return (numLeft + numRight);
}
二叉树叶子节点个数
递归方式
(1)假设给定节点pRoot为NULL,则是空树,叶子节点为0,返回0;
(2)假设给定节点pRoot左右子树均为NULL。则是叶子节点,且叶子节点数为1。返回1;
(3)假设给定节点pRoot左右子树不都为NULL,则不是叶子节点,以pRoot为根节点的子树叶子节点数=pRoot左子树叶子节点数+pRoot右子树叶子节点数
代码例如以下
int GetLeafNum(BinaryTreeNode *pRoot)
{
if( pRoot ==NULL )
return0;
if(pRoot->m_pLeft == NULL && pRoot->m_pRight == NULL )
return1;
return (GetLeafNum( pRoot->m_pLeft) + GetLeafNum ( pRoot->m_pRight) );
}
非递归方式:
用非递归便利的方式遍历二叉树。便利的同一时候。推断当前节点是否为叶子节点,假设是,计数器计数。