二叉树中所有距离为 K 的结点:返回到目标结点 target 距离为 k 的所有结点的值组成的数组
目录
1. 总结
- ① mapping 对象:让每个节点的
parent 指针
指向 指向改节点的父节点
- ② 执行 BFS
var distanceK = function (root, target, k) {
let mapping = new Map();
function traverse(root, parent) {
if (!root) return;
mapping.set(root.val, parent);
traverse(root.left, root);
traverse(root.right, root);
}
traverse(root, null);
function dfs() {
let q = [target];
let visited = new Set([target.val]);
let res = [];
let dist = 0; // 离 target 的距离
while (q.length) {
let size = q.length;
for (let i = 0; i < size; i++) {
let cur = q.shift();
if (dist === k) {
res.push(cur.val);
}
let neighbors = [cur.left, cur.right, mapping.get(cur.val)];
for (let item of neighbors) {
if (item && !visited.has(item.val)) {
q.push(item);
visited.add(item.val);
}
}
}
dist++;
}
return res;
}
return dfs();
};
2. 题目
与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,以及 1