二叉树中所有距离为k的节点。
给定一个二叉树,一个目标节点,一个整数值k,返回到目标节点距离为k的所有节点的值的列表,答案可以以任何顺序返回。
由一个节点出发,使用dfs搜索所有距离为k的节点。由于输入的搜索二叉树没有记录父节点,dfs同时需要用哈希表记录每个节点的父节点。
- 时间复杂度O(n)
- 空间复杂度O(n)
\
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @param {TreeNode} target
* @param {number} k
* @return {number[]}
*/
var distanceK = function(root, target, k) {
const map = new Map();
const res = [];
const findParent = function(node) {
if (node.left) {
map.set(node.left.val, node);
findParent(node.left);
}
if (node.right) {
map.set(node.right.val, node);
findParent(node.right);
}
}
const findK = function (node, from, depth, k) {
if (!node) return;
if (depth === k) {
res.push(node.val);
return;
}
if (node.left !== from) findK(node.left, node, depth + 1, k);
if (node.right !== from) findK(node.right, node, depth + 1, k);
if (map.get(node.val) !== from) findK(map.get(node.val), node, depth + 1, k);
}
findParent(root);
findK(target, null, 0, k);
return res;
};