对给定的有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
解题思路:由上方示例中二叉树的图片我们可以看到10,25是叶子,由下方输入内容我们可以看出根20,在下方20 0 10和20 1 25 的第一位中都有出现所以它不是叶子,而10,25,并没有出现在输入每行数据的第一位,所以它俩是叶子,加起来就是35,本题的解题思路就来源于此。
以下是代码:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();//节点数
if(n==0)
{
System.out.print(n);//空树
return;
}
if(n==1)
{
System.out.print(sc.nextInt());//一个节点
return;
}
int e=sc.nextInt();//输入根节点
int t=n-1;
Tree a[]=new Tree[t];//定义t个Tree类型指针,注意是指针!并没有给它们分配空间
//这些Tree类型指针的名字分别叫a[i](i>=0&&i<t);
for(int k=0;k<t;k++)
{
a[k]=new Tree();//分配空间
a[k].i=sc.nextInt();
a[k].j=sc.nextInt();
a[k].d=sc.nextInt();
}
int sum=0;
int flag=1;//判断是不是叶子节点
for(int k=0;k<t;k++)
{
flag=1;
for(int j=0;j<t;j++)
if(a[k].d==a[j].i)
flag=0;
if(flag!=0)
sum=sum+a[k].d;
}
System.out.println(sum);
}
}
class Tree{
int i=0;
int j=0;
int d=0;
}