对给定的有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
题目分析:这道题我没有建立二叉树,也没有用到题中给出的左右孩子标记,就是单纯用vector数组存放下每个结点的孩子,用普通一维数组标记所有的结点值,然后遍历数组如果当前结点值没有孩子就是叶子结点。
题目解答:
#include<bits/stdc++.h>
using namespace std;
vector<int> ve[10001];
int rnt[10001];
int main(){
int n;
cin>>n;
int root;
cin>>root;
rnt[0]=root;
int k=0,sum=0;
for(int i=0;i<n-1;i++){
int r,d,e;
cin>>r>>d>>e;
rnt[k++]=e;
ve[r].push_back(e);
}
for(int i=0;i<k;i++){
if(ve[rnt[i]].size()==0){
sum+=rnt[i];
}
}
if(n==1)//注意:仅有根节点输出根节点值
cout<<root<<endl;
else cout<<sum<<endl;
return 0;
}