Skip to content

Instantly share code, notes, and snippets.

@igavrysh
Created May 13, 2024 15:30
Show Gist options
  • Save igavrysh/52938f8d8339eebc331fdc0c7d14f413 to your computer and use it in GitHub Desktop.
Save igavrysh/52938f8d8339eebc331fdc0c7d14f413 to your computer and use it in GitHub Desktop.
Leetcode 1530. Number of Good Leaf Nodes Pairs Attempt#1
/**
1530. Number of Good Leaf Nodes Pairs
Attempt#1
https://leetcode.com/problems/number-of-good-leaf-nodes-pairs/
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int countPairs(TreeNode root, int distance) {
int[] result = new int[1];
dfs(root, result, distance);
return result[0];
}
private int[] dfs(TreeNode node, int[] result, int d) {
if (node.left == null && node.right == null) {
int[] dist = new int[d+1];
dist[0] = 1;
return dist;
}
int[] dist = new int[d+1];
int[] distLeft = null;
if (node.left != null) {
distLeft = dfs(node.left, result, d);
for (int i = d; i >= 1; i--) {
distLeft[i] = distLeft[i-1];
}
distLeft[0] = 0;
System.out.print("distLeft: ");
for (int i = 0; i < distLeft.length; i++) {
System.out.print(distLeft[i] + ", ");
}
System.out.print("\n");
}
int[] distRight = null;
if (node.right != null) {
distRight = dfs(node.right, result, d);
for (int i = d; i >= 1; i--) {
distRight[i] = distRight[i-1];
}
distRight[0] = 0;
System.out.print("distRigth: ");
for (int i = 0; i < distRight.length; i++) {
System.out.print(distRight[i] + ", ");
}
System.out.print("\n");
}
for (int i = 0; i <= d; i++) {
dist[i] = (distLeft == null ? 0 : distLeft[i])
+ (distRight == null ? 0 : distRight[i]);
}
if (distLeft != null && distRight != null) {
for (int i = 1; i <= d; i++) {
for (int l = 1; l <= i-1; l++) {
if (distLeft[l] > 0 && distRight[i-l] > 0) {
int delta = Math.min(distLeft[l], distRight[i-l]);
result[0] += delta;
distLeft[l] -= delta;
distRight[i-l] -= delta;
}
}
}
}
return dist;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment