java: add «2641. Cousins in Binary Tree II»

URL:	https://leetcode.com/problems/cousins-in-binary-tree-ii/
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2024-10-23 23:39:09 +02:00
parent 18e176c3e6
commit 29f2194d56
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8

View file

@ -0,0 +1,51 @@
class Solution {
private int get(TreeNode node) {
if (node == null) {
return 0;
}
return node.val;
}
private void handleNode(Queue<TreeNode> q, int siblings, TreeNode node) {
if (node == null) {
return;
}
node.val = siblings;
q.offer(node);
}
private int handleLevel(Queue<TreeNode> q, int previous) {
int sum = 0;
for (int i = q.size(); i > 0; --i) {
var node = q.poll();
node.val = previous - node.val;
var siblings = get(node.left) + get(node.right);
handleNode(q, siblings, node.left);
handleNode(q, siblings, node.right);
sum += siblings;
}
return sum;
}
public TreeNode replaceValueInTree(TreeNode root) {
if (root == null) {
return root;
}
Queue<TreeNode> q = new ArrayDeque<>();
int sumAbove = root.val;
q.offer(root);
while (!q.isEmpty()) {
sumAbove = handleLevel(q, sumAbove);
}
return root;
}
}