请用c++语言写代码,题目是以结构体数组作为二叉树的存储结构,求二叉树的叶子结点个数。 输入格式: 输入二叉树的先序序列。 提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。 输出格式: 输出有两行: 第一行是二叉树的中序遍历序列; 第二行是二叉树的叶子结点个数。
时间: 2023-06-10 19:04:20 浏览: 102
C语言代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct TreeNode {
char data;
struct TreeNode *lchild; // 左子树指针
struct TreeNode *rchild; // 右子树指针
} TreeNode, *pTreeNode;
pTreeNode createNode(char data) {
// 创建一个新的节点
pTreeNode newNode = (pTreeNode)malloc(sizeof(TreeNode));
newNode->data = data;
newNode->lchild = NULL;
newNode->rchild = NULL;
return newNode;
}
pTreeNode createTree(char *str, int *index) {
// 根据先序序列创建一颗二叉树
if (str[*index] == '\0') {
return NULL;
}
if (str[*index] != '#') {
pTreeNode newNode = createNode(str[*index]);
(*index)++;
newNode->lchild = createTree(str, index);
(*index)++;
newNode->rchild = createTree(str, index);
return newNode;
} else {
(*index)++;
return NULL;
}
}
int countLeaf(pTreeNode root) {
// 二叉树叶子结点计数
int count = 0;
if (root == NULL) {
return 0;
}
if (root->lchild == NULL && root->rchild == NULL) {
return 1;
}
count += countLeaf(root->lchild);
count += countLeaf(root->rchild);
return count;
}
int main() {
char str[100];
int index = 0;
printf("请输入二叉树的先序序列:");
scanf("%s", str);
pTreeNode root = createTree(str, &index);
int leafNum = countLeaf(root);
printf("叶子结点个数为:%d\n", leafNum);
return 0;
}
阅读全文