求二叉树的每种结点数

【问题描述】输入一棵二叉树,求二叉树的每种结点数

【输入形式】连续输入结点,用#表示空。
【输出形式】分别输入度为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,&degree);
    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;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值