对给定的有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;
}