叶节点求和

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

输入格式:
第一行是一个非负整数N,表示有N个节点

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

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

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

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

输入样例:
在这里插入图片描述

对于图片中的二叉树:

3
20
20 0 10
20 1 25
输出样例:
35

#include <stdio.h>
#include <stdlib.h>


typedef struct node
{
    int data;
    struct node* lchild;
    struct node* rchild;
}BTNode,*BiTree;

int sum=0;
void PreOrder(BiTree bt)
{
    if (bt==NULL)
    {
        return ;
    }
    if (bt->lchild==NULL&&bt->rchild==NULL)
    {
        sum=sum+bt->data;
    }
    PreOrder(bt->lchild);
    PreOrder(bt->rchild);
}

int main()
{
    BTNode* Queue[100],*p;
    int rear=-1,i,r,d,e,N,K,j,front=-1;
    BiTree bt=(BTNode*)malloc(sizeof(BTNode));
    scanf("%d",&N);
     if (N>0)
    {


    scanf("%d",&K);
    bt->data=K;
    bt->lchild=bt->rchild=NULL;
    Queue[++rear]=bt;
    for (i=1;i<N;i++)
    {
        j=0;
        scanf("%d %d %d",&r,&d,&e);
        while(Queue[j]->data!=r)
        {
            j++;
        }
        if (d==0)
        {
            p=(BTNode*)malloc(sizeof(BTNode));
            p->data=e;
            p->lchild=p->rchild=NULL;
            Queue[j]->lchild=p;
            Queue[++rear]=p;
        }
        else
        {
            p=(BTNode*)malloc(sizeof(BTNode));
            p->data=e;
            p->lchild=p->rchild=NULL;
            Queue[j]->rchild=p;
            Queue[++rear]=p;
        }
    }
    PreOrder(bt);
    }
    printf("%d",sum);
    return 0;
}


发布了11 篇原创文章 · 获赞 2 · 访问量 616

猜你喜欢

转载自blog.csdn.net/Cheng_XZ/article/details/103270041