对给定的有N
个节点(N>=0
)的二叉树,求叶节点元素之和。
输入格式:
第一行是一个非负整数N
,表示有N
个节点
第二行是一个整数k
,是树根的元素值
接下来有N-1
行,每行是一个新节点,格式为 r d e
三个整数,
r
表示该节点的父节点元素值(保证父节点存在);d
是方向,0
表示该节点为父节点的左儿子,1
表示右儿子;e
是该节点的元素值。
输出格式:
树中叶节点元素之和 (保证在整型变量范围之内)。
输入样例:
对于图片中的二叉树:
3
20
20 0 10
20 1 25
#include <iostream>
#include <map>
using namespace std;
typedef struct node
{int data;int left,right;
}TNode;
int main()
{int n;cin>>n;map <int ,int>m;int book[n]={0};//用来记录是否有孩子,可用来判断是否为叶子节点TNode * tree = new TNode[n];int k;cin>>k;m[k]=0;if(n==1){cout<<k;return 0; }for(int i=1;i<n;i++){int r,d,e;cin>>r>>d>>e;book[ m[r] ] = 1;m[e]=i;tree[i].data = e;if(d==0)tree[m[r]].left = i;else if(d==1)tree[m[r] ].right = i;}int total=0;for(int i=0;i<n;i++){if(book[i]==0)total+=tree[i].data;}cout<<total;return 0;
}