TIL
[코테연습] 1530. Number of Good Leaf Nodes Pairs
by 크라00
2024. 7. 18.
https://leetcode.com/problems/number-of-good-leaf-nodes-pairs/submissions/1324846984/?envType=daily-question&envId=2024-07-18
/**
* 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) {
Map<TreeNode, List<TreeNode>> map = new HashMap<>();
List<TreeNode> leaves = new ArrayList<>();
findLeaves(root, new ArrayList<>(), leaves, map);
int res = 0;
for (int i = 0; i < leaves.size(); i++) {
for (int j = i + 1; j < leaves.size(); j++) {
List<TreeNode> list_i = map.get(leaves.get(i));
List<TreeNode> list_j = map.get(leaves.get(j));
for (int k = 0; k < Math.min(list_i.size(), list_j.size()); k++) {
if (list_i.get(k) != list_j.get(k)) {
int dist = list_i.size() - k + list_j.size() - k;
if (dist <= distance) res++;
break;
}
}
}
}
return res;
}
private void findLeaves(TreeNode node, List<TreeNode> trail, List<TreeNode> leaves, Map<TreeNode, List<TreeNode>> map) {
if (node == null) return;
List<TreeNode> tmp = new ArrayList<>(trail);
tmp.add(node);
if (node.left == null && node.right == null) {
map.put(node, tmp);
leaves.add(node);
return;
}
findLeaves(node.left, tmp, leaves, map);
findLeaves(node.right, tmp, leaves, map);
}
}