求二叉树叶子结点的个数
1.如果根节点为NULL时,则是空树,返回0;
2.根节点不为空时,如果根节点的左右子树均为空,则该二叉树中只有一个节点,即返回1;
3.叶子节点的个数=左子树叶子节点数+右子树叶子节点数;
代码如下:
int _GetNodeyezi(Node* root) //叶子节点的个数
{
if (root == NULL)
{
return 0;
}
if ((root->_left == NULL) && (root->_right == NULL))
{
return 1;
}
return _GetNodeyezi(root->_left) + _GetNodeyezi(root->_right); //左子树叶子节点+右子树叶子节点
}
求第K层的结点个数
1.根节点为空或者K<=0时,返回0;
2.根节点不为空时,K==1时,返回1个,第一层最多只有一个节点;
3.第K层节点数: 找到第K层,递归得到该层节点数;每次K-1,直到第K层时,K刚好为0,即递归结束。
代码如下:
int _GetNodeK(Node* root, size_t k) //第K层节点个数
{
if (root == NULL || k <= 0)
{
return 0;
}
if (root != NULL && k == 1)
{
return 1;
}
return _GetNodeK(root->_left, k - 1) + _GetNodeK(root->_right, k - 1);
}