关注
public class TreeNode {
//树节点的结构
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
left = null;
right = null;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int T = in.nextInt();
for (int i = 0; i < T; i++) {
int N = in.nextInt();
//先把每个节点存在数组tree中
TreeNode[] tree = new TreeNode[N];
int[] val = new int[N];
int[] left = new int[N];
int[] right = new int[N];
int[] root = new int[N];
for (int j = 0; j < N; j++) {
val[j] = in.nextInt();
tree[j] = new TreeNode(val[j]);
left[j] = in.nextInt();
right[j] = in.nextInt();
}
//添加节点的左右子节点,同时记录哪些点是有父节点的,有父节点的把root数组的相应位置标记为1
for (int j = 0; j < N; j++) {
if (left[j] != -1) {
tree[j].left = tree[left[j]];
root[left[j]] = 1;
}
if (right[j] != -1) {
tree[j].right = tree[right[j]];
root[right[j]] = 1;
}
}
//广度优先搜索
Queue<TreeNode> q = new LinkedList<TreeNode>();
//根节点一定不是任何节点的左右子节点,所以root数组中为0的那个节点就是根结点
for (int j = 0; j < N; j++) {
if (root[j] == 0) {
q.add(tree[j]);
break;
}
}
//presum记录上一层的和,sum记录下一层的和
int presum = -1;
boolean flag = true;
while (!q.isEmpty()) {
int size = q.size();//size记录当前层有多少个节点
int index = 0;//index记录当前层有多少个节点已经搜索过了
int sum = 0;//记录当前层节点的权值之和
while (index < size) {
TreeNode tmp = q.poll();
sum += tmp.val;
index++;
if (tmp.left != null)
q.add(tmp.left);
if (tmp.right != null)
q.add(tmp.right);
}
if (presum == -1) {
presum = sum;//第一层时presum为-1,令他等于当前层的结果
} else if (presum > sum) {//不为第一层时比较当前层和上一层的和是否满足递增,不满足则退出循环输出NO
flag = false;
break;
}
}
if (flag)
System.out.println("YES");
else
System.out.println("NO");
}
}
}
查看原帖
点赞 5
相关推荐
查看12道真题和解析 点赞 评论 收藏
分享
02-13 18:45
山东大学 C++ 点赞 评论 收藏
分享
2025-12-21 21:22
安徽农业大学 运营 点赞 评论 收藏
分享
01-05 20:07
西安电子科技大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 牛客新年AI问运 #
2057次浏览 43人参与
# 产品人专业大盘点 #
68322次浏览 323人参与
# 牛客AI体验站 #
15377次浏览 271人参与
# 产品每日一题 #
85201次浏览 694人参与
# 牛友的春节生活 #
10457次浏览 204人参与
# 备战春招/暑实,现在应该做什么? #
7123次浏览 198人参与
# 我们是不是被“优绩主义”绑架了? #
31724次浏览 480人参与
# 从夯到拉,锐评职场mentor #
6954次浏览 107人参与
# 制造业的秋招小结 #
143257次浏览 2089人参与
# 实习到现在,你最困惑的一个问题 #
6198次浏览 163人参与
# 春招什么时候投? #
12678次浏览 207人参与
# 找工作中的意难平 #
982886次浏览 6423人参与
# 春节提前走,你用什么理由请假? #
12833次浏览 287人参与
# 距离春招还有一个月,你现在是什么开局? #
8748次浏览 132人参与
# 今年秋招你收到了多少封邮件? #
38186次浏览 280人参与
# 春节前,你还在投简历吗? #
16819次浏览 190人参与
# 暑期实习什么时候投? #
8960次浏览 196人参与
# 数字马力求职进展汇总 #
330899次浏览 2380人参与
# 聊聊Agent开发 #
28949次浏览 654人参与
# 我的省钱小妙招 #
38260次浏览 449人参与
