2
* Definition for a binary tree node.3
* function TreeNode(val, left, right) {4
* this.val = (val===undefined ? 0 : val)5
* this.left = (left===undefined ? null : left)6
* this.right = (right===undefined ? null : right)10
* @param {TreeNode} root11
* @param {number} distance14
var countPairs = function (root, distance) {15
var graph = new Map();16
var leaves = new Map();17
function dfs(root, parent) {19
if (!root.left && !root.right) {20
leaves.set(root, true);25
graph.get(root).push(root.left);28
graph.get(root).push(root.right);31
graph.get(root).push(parent);34
dfs(root.right, root);39
var visited = new Map();42
function bfs(start, dis) {43
visited.set(start, true);44
var queue = [graph.get(start).filter((node) => !visited.has(node))];46
var innerVisited = new Map();48
while (queue.length) {49
var curLevelNodes = queue.shift();51
if (!curLevelNodes.length) break;54
var nextLevelNodes = [];55
for (var i = 0; i < curLevelNodes.length; i++) {56
var curLevelNode = curLevelNodes[i];58
innerVisited.set(curLevelNode, true);60
if (leaves.has(curLevelNode)) {67
.filter((node) => !visited.has(node) && !innerVisited.has(node))70
queue.push(nextLevelNodes);75
leaves.forEach((value, leaf) => {