数据结构用递归算法计算二叉树中叶子结点数目的思想c语言程序,以二叉链表为存储结构, 试编写计算二叉树中叶子结点数目的递归算法....
时间: 2024-02-23 12:57:56 浏览: 100
常用的数据结构的算法,包括二叉树的三种递归和非递归算法,染色问题,八皇后问题,深度广度遍历,约瑟夫环,数值转换,树的高度和叶子节
好的,以下是计算二叉树中叶子结点数目的递归算法的C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义二叉树结构
typedef struct TreeNode {
int data;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
// 创建二叉树
TreeNode* createTree() {
TreeNode *root = NULL;
int num;
scanf("%d", &num);
if (num != -1) { // 如果输入的值不是-1,则继续创建左右子树
root = (TreeNode*)malloc(sizeof(TreeNode));
root->data = num;
root->left = createTree();
root->right = createTree();
}
return root;
}
// 计算二叉树中叶子结点数目的递归算法
int countLeafNodes(TreeNode *root) {
if (root == NULL) { // 如果根节点为空,则返回0
return 0;
} else if (root->left == NULL && root->right == NULL) { // 如果根节点为叶子结点,则返回1
return 1;
} else { // 否则递归计算左右子树的叶子结点数目
return countLeafNodes(root->left) + countLeafNodes(root->right);
}
}
int main() {
printf("请输入二叉树中各个结点的值,-1表示该结点为空:\n");
TreeNode *root = createTree();
int num = countLeafNodes(root);
printf("二叉树中叶子结点的数目为:%d\n", num);
return 0;
}
```
以上程序利用递归算法计算二叉树中叶子结点的数目,对于每个结点,如果其左右子树都为空,则说明该结点是叶子结点,返回1;否则,递归计算左右子树的叶子结点数目并相加,最终得到整棵二叉树中叶子结点的数目。
阅读全文