在之前已经写了求叶子结点的个数,其实两者相差不多,只是求叶子结点跳出函数的要求不一样,当孩子的左右结点都为空的时候,返回1,求结点个数就不一样,当节点不为空就返回1,总体思想就是,结点个数为左孩子加右孩子再加1,这个1就是加的自己的个数。代码如下
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
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 fail\n");
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);
node1->left = node2;
node1->right = node4;
node2->left = node3;
node4->left = node5;
node4->right = node6;
return node1;
}
同样的,还是要手动建立一个链式二叉树
int BinaryTreeSize(BTNode*root)
{
if (root == NULL)
{
return 0;
}
return BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;
}
求结点个数的接口
int main()
{
BTNode*node = CreatBinaryTree();
int sz = BinaryTreeSize(node);
printf("%d ", sz);
return 0;
}