思路
需要注意的就是它的节点编号是从1开始的,Node的l和r是int类型,而不是Node类型,因为题目在给定l和r的时候,给的是下标而不是一个node对象,其余的就没有了,树的遍历这个贼简单
代码
import java.util.*;
class Node{
int l,r;
public Node(int l,int r){
this.l=l;
this.r=r;
}
}
public class Main{
static int len;
static int[] weights;
static long sum = 0l;
static Node[] node;
public static void dfs(int root,int value){
if(root==-1)
return;
if(value==0)
sum+=weights[root];
if(node[root].l!=-1)
dfs(node[root].l,value+1);
if(node[root].r!=-1)
dfs(node[root].r,value-1);
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
len = s.nextInt();
weights =new int[len+1];
node = new Node[len+1];
for(int i=1;i<=len;i++)
weights[i]=s.nextInt();
for(int i=1;i<=len;i++)
{
int l = s.nextInt();
int r = s.nextInt();
node[i] = new Node(l,r);
}
dfs(1,0);
System.out.println(sum);
s.close();
}
}