叶节点求和(PTA)

这篇文章描述了如何使用C语言编程解决一个关于给定二叉树中叶节点元素之和的问题。通过递归遍历和标记节点,计算所有叶节点的元素总和。
摘要由CSDN通过智能技术生成

对给定的有N个节点(N>=0)的二叉树,求叶节点元素之和。

输入格式:

第一行是一个非负整数N,表示有N个节点

第二行是一个整数k,是树根的元素值

接下来有N-1行,每行是一个新节点,格式为 r d e 三个整数,

r表示该节点的父节点元素值(保证父节点存在);d是方向,0表示该节点为父节点的左儿子,1表示右儿子;e是该节点的元素值。

树中叶节点的元素值是不重复的(这点我问过周强老师(本题的出题人兼我的数据结构老师))

输出格式:

树中叶节点元素之和 (保证在整型变量范围之内)。

输入样例:

fig.jpg

对于图片中的二叉树:

3
20
20 0 10
20 1 25

输出样例:

35
#include<stdio.h>
typedef struct node
{
    int r;//父节点
    int d;//表示左孩子还是右孩子,左为0右为1
    int e;//该节点元素值
    int flag;//
}tree,*Treeptr;
//然后使用 typedef 关键字将 Lnode 重命名为 Tree,
//并定义一个指向 tree 结构体类型的指针 Tree。
//C语言中的结构体定义不支持在结构体内部直接初始化成员变量

int main()
{
    int n;//n个节点
    scanf("%d",&n);
    int k;//根节点的值
    scanf("%d",&k);
    //int t=n-1;
    int i;
    tree t[n-1];//定义的应该是结构体本身而不是指针
    //记一下报错
    //Tree 是一个指向结构体 node 的指针类型,而不是结构体类型本身。
    //因此,在 scanf 函数中使用 Tree 是不正确的,
    //因为它不是一个具有结构或联合类型的表达式。
    //如果你想使用 scanf 函数来读取输入并存储到 tree 数组中的结构体变量中,
    //你应该使用 Tree 的指针类型 TreePtr。
    if(n==0)
    {printf("%d",0);return 0;} // 空树
    if(n==1)
    {printf("%d",k);return 0;} // 仅含有根节点
    
    for(int i=0;i<n-1;i++)
    {
         t[i].flag=1;//表示是叶子节点
         scanf("%d %d %d",&t[i].r,&t[i].d,&t[i].e);
    }
    int sum=0;
    for(int i=0;i<n-1;i++)
    {
        
    for(int j=0;j<n-1;j++)
    {
        if(t[i].e==t[j].r)
        t[i].flag=0;
        
    }
     if(t[i].flag)
        {
            sum=sum+t[i].e;
        }

    }
    
    printf("%d",sum);

    return 0;
}

 

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值