要求二叉树的结点数,可以使用递归的方式,分别求出左子树和右子树的结点数,然后将它们加起来再加上根节点的数量即可。 具体实现如下: ```c int count_nodes(TreeNode* root) { if (root == NULL) { // 如果根节点为空,返回 0 return 0; } int left_count = count_nodes(root->left); // 左子树结点数 int right_count = count_nodes(root->right); // 右子树结点数 return left_count + right_count + 1; // 返回左子树结点数、右子树结点数和根节点的数量之和 } ``` 其中,`count_nodes` 函数接受一个指向根节点的指针 `root`,返回整个二叉树的结点数。 如果 `root` 为空,说明该二叉树为空,直接返回 0。 否则,递归求出左子树和右子树的结点数,分别保存在变量 `left_count` 和 `right_count` 中。 最后,返回左子树结点数、右子树结点数和根节点的数量之和,即为整个二叉树的结点数。 可以通过如下代码进行测试: ```c int main() { // 构造一棵二叉树 TreeNode* root = create_tree(); // 求结点数 int count = count_nodes(root); // 输出结果 printf("The number of nodes is: %d\n", count); // 释放内存 destroy_tree(root); return 0; } ``` (责任编辑:) |