给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 k 。
返回到目标结点 target 距离为 k 的所有结点的值的列表。 答案可以以 任何顺序 返回。力扣原文
示例 1:
输入: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2
输出: [7,4,1]
解释: 所求结点为与目标结点(值为 5)距离为 2 的结点,值分别为 7,4,以及 1
示例 2:
输入: root = [1], target = 1, k = 3
输出: []
解题:
var distanceK = function (root, target, k) {
if (!root) return [];
let targetNode = null;
let result = [],
paths = [];
//寻找target节点
getTarget(root, target);
// 向下寻找目标节点
getNode(targetNode, k);
// 向上查找
while (targetNode.parent && k > 0) {
targetNode = targetNode.parent;
getNode(targetNode, --k);
}
// 寻找目标节点
function getNode(node, k) {
if (node === null || paths.indexOf(node) !== -1) {
return;
}
paths.push(node);
if (k > 0) {
getNode(node.left, k - 1);
getNode(node.right, k - 1);
} else if (k === 0) {
result.push(node.val);
}
}
function getTarget(node, target) {
if (!root || targetNode) return;
if (node.val === target.val) {
targetNode = node;
}
if (node.left) {
node.left.parent = node;
getTarget(node.left, target);
}
if (node.right) {
node.right.parent = node;
getTarget(node.right, target);
}
};
return result;
};