题目:求二叉树叶子节点的个数/求二叉树第k层的节点个数。
这两个题的方法是一样的,用递归就可以求解
1.叶子节点:
1)当前节点为NULL,返回0
2)没有左右孩子,返回1
3)否则返回左孩子的叶子节点个数加上右孩子的叶子节点个数
size_t BinaryTree::_GetLeefNode(Node* pRoot)
{
if (NULL == pRoot)
return 0;
if (NULL == pRoot->_pLeft && NULL == pRoot->_pRight)
return 1;
return _GetLeefNode(pRoot->_pLeft) + _GetLeefNode(pRoot->_pRight);
}
2.第k层:
1)k小于0,返回0
2)k等于0,返回1
3)否则返回左孩子的k-1层节点个数加上右孩子的k-1层节点个数
size_t BinaryTree::_NumOfKLevel(Node* pRoot, int k){
if (k < 0)
return 0;
if (k == 0)
return 1;
return _NumOfKLevel(pRoot->_pLeft, k - 1) + _NumOfKLevel(pRoot->_pRight, k - 1);
}