【问题描述】输入一棵二叉树,求二叉树的每种结点数
【输入形式】连续输入结点,用#表示空。
【输出形式】分别输入度为2,度为1,度为0的结点数。
【样例输入】ABC##D##E##
【样例输出】度为2的结点为2个,度为1为结点为0个,度为0的结点为3个。
【样例说明】
【评分标准】
//
// Created by 江湖梦 on 2023/5/17.
//
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
typedef struct treeNode{
char data;
struct treeNode *left;
struct treeNode *right;
}treeNode,*Tree;
typedef struct Degrees{
int zero;
int one;
int two;
}Degree;
void createTree(Tree tree);
int degreeTree(treeNode* tree, Degree *degree);
int main(void){
Degree degree;
Tree tree=(Tree)malloc(sizeof(Tree));
degree.zero=0;
degree.one=0;
degree.two=0;
createTree(tree);
degreeTree(tree,°ree);
printf("度为2的结点为%d个,度为1为结点为%d个,度为0的结点为%d个",degree.two,degree.one,degree.zero);
}
void createTree(Tree tree){
char data;
scanf("%c",&data);
if( data != 35){
tree->data=data;
if(tree!=NULL){
tree->left=(Tree)malloc(sizeof(Tree));
createTree(tree->left);
tree->right=(Tree)malloc(sizeof(Tree));
createTree(tree->right);
}
}else{
tree->data=data;
}
}
int degreeTree(treeNode* tree, Degree *degree){
int x=-1,y=-1;
if(tree->data!=35){
x=degreeTree(tree->left, degree);
y=degreeTree(tree->right, degree);
if(x==1&&y==1){
degree->two++;
} else if(x == -1&&y==-1){
degree->zero++;
}else{
degree->one++;
}
return 1;
}else{
return -1;
}
}