R6-1 二叉树 - 10. 求结点数 分数 8 作者 李祥 单位 湖北经济学院 请编写函数,求二叉树的结点个数。 函数原型 int BinTreeNumNode(const TNODE *root); 说明:root 为二叉树的根指针,函数值为二叉树的结点数。 在“BinTree.h”中声明函数,在“BinTree.c”中实现函数。 BinTree.h ...... int BinTreeNumNode(const TNODE *root); ...... BinTree.c ...... /* 你提交的代码将被嵌在这里 */ 打开“main.c”,修改主函数对以上函数进行测试。 main.c #include <stdio.h> #include "BinTree.h" int main() { TNODE *r; BinTreeCreate(&r); BinTreeInput(&r); printf("%d\n", BinTreeNumNode(r)); BinTreeDestroy(&r); return 0; } 题图.jpg 输入样例 EIBJ##H###DF#A##G#C## 输出样例 10
时间: 2024-02-07 11:04:15 浏览: 23
好的,问题已经收到。关于你的问题,我已经了解到了题目要求,可以开始回答了。
这道题需要求出给定二叉树的结点个数。我们可以使用递归的方式来实现这个算法,即对于当前节点,其结点个数为其左子树结点个数加上右子树结点个数再加上 1。递归终止条件是当前节点为 NULL,此时结点个数为 0。
以下是代码实现:
```
int BinTreeNumNode(const TNODE *root) {
if (root == NULL) {
return 0;
}
return BinTreeNumNode(root->left) + BinTreeNumNode(root->right) + 1;
}
```
在测试时,可以使用给定的 `main` 函数。
相关问题
R6-1 二叉树 - 10. 求结点数
要求二叉树的结点数,可以使用递归的方式,分别求出左子树和右子树的结点数,然后将它们加起来再加上根节点的数量即可。
具体实现如下:
```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;
}
```
R6-1 统计二叉树度为1的结点个数
一个二叉树的度为1的结点,指的是只有一个子节点的节点。统计二叉树度为1的结点个数可以通过递归实现。
具体思路如下:
1. 如果当前节点为空,则返回0。
2. 如果当前节点的左右子树都为空,则返回0。
3. 如果当前节点只有一个子节点,则返回1。
4. 如果当前节点有两个子节点,则递归地计算左右子树中度为1的节点个数之和。
下面是代码实现:
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def count_degree_one_nodes(root):
if not root:
return 0
if not root.left and not root.right:
return 0
if not root.left or not root.right:
return 1
return count_degree_one_nodes(root.left) + count_degree_one_nodes(root.right)
```
其中,TreeNode 是二叉树的结点类,count_degree_one_nodes 是统计二叉树度为1的节点个数的函数。