二叉樹中所有距離為K的節(jié)點
題目:給定一個二叉樹(具有根結(jié)點 root)芙沥, 一個目標結(jié)點 target 腥寇,和一個整數(shù)值 K 烤黍。
返回到目標結(jié)點 target 距離為 K 的所有結(jié)點的值的列表魂爪。 答案可以以任何順序返回蝌数。
示例:
輸入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2
輸出:[7,4,1]
解釋:
所求結(jié)點為與目標結(jié)點(值為 5)距離為 2 的結(jié)點,
值分別為 7贷祈,4趋急,以及 1
image
var distanceK = function(root, target, k) {
if (!root) return [];
let res = [], paths = [], targetNode = null;
function dfs(_root, _target) {
if (!_root || targetNode) return;
if (_root.val === _target.val) {
targetNode = _root
}
if (_root.left) {
_root.left.parent = _root;
dfs(_root.left, target)
}
if (_root.right) {
_root.right.parent = _root;
dfs(_root.right, target)
}
}
function getdownDis(node, k) {
if(node === null || paths.indexOf(node) !== -1) return;
paths.push(node);
if(k > 0){
getdownDis(node.left, k-1);
getdownDis(node.right, k-1);
}else if(k === 0){
res.push(node.val);
}
}
// 找到target節(jié)點
dfs(root, target)
// 從當前節(jié)點向下尋找
getdownDis(targetNode, k);
// 從當前節(jié)點向上尋找
while(targetNode.parent && k > 0){
targetNode = targetNode.parent;
getdownDis(targetNode, --k);
}
return res;
};