之前我们写过怎么求叶子结点的个数,叶子结点个数就是求它的左子树的叶子结点,加上柚子树的叶子结点,依次递归下去,可能最难得就是跳出递归的条件,由于是求叶子结点,所以当它的左右子树都为空的时候就返回1,如果是空的树就返回零。同样的,我们要找K层的节点数,所以我们每遍历一层就k-1最后当k==1的时候,就到了第K层了,所以这就是我们的终止递归的条件。
#include#include #include typedef int BTDataType; typedef struct BinaryTreeNode//创建一个链式结构体 { BTDataType data; struct BinaryTreeNode* left; struct BinaryTreeNode* right; }BTNode; BTNode*BuyNode(BTDataType x)//创建一个新的结点 { BTNode*newnode = (BTNode*)malloc(sizeof(BTNode)); if (newnode == NULL) { printf("malloc failn"); exit(-1); } newnode->data = x; newnode->left = NULL; newnode->right = NULL; return newnode; } BTNode* CreatBinaryTree()//手动创建一个链式结构的二叉树, { BTNode* node1 = BuyNode(1); BTNode* node2 = BuyNode(2); BTNode* node3 = BuyNode(3); BTNode* node4 = BuyNode(4); BTNode* node5 = BuyNode(5); BTNode* node6 = BuyNode(6); BTNode* node7 = BuyNode(7); node1->left = node2; node1->right = node4; node2->left = node3; node4->left = node5; node4->right = node6; node2->right = node7; return node1; }
首先我们手动的构造一个链式二叉树,如上所示。
int BrinaryKLeverSize(BTNode*root,int k)
{
assert(k >= 1);//防止我们的K小于1
if (root == NULL)
{
return 0;//当为空的时候,就返回零
}
if (k == 1)
{
return 1;
}
return BrinaryKLeverSize(root->left, k - 1) + BrinaryKLeverSize(root->right, k - 1);加上左子树的节点数和右子树的节点数
}
int main()
{
BTNode*node = CreatBinaryTree();
int size = BrinaryKLeverSize(node,3);
printf("%d ", size);
return 0;
}



