Description
Given the root
of a binary tree, the value of a target node target
, and an integer k
, return an array of the values of all nodes that have a distance k
from the target node.
You can return the answer in any order.
Example 1:

Input: root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, k = 2 Output: [7,4,1] Explanation: The nodes that are a distance 2 from the target node (with value 5) have values 7, 4, and 1.
Example 2:
Input: root = [1], target = 1, k = 3 Output: []
Constraints:
- The number of nodes in the tree is in the range
[1, 500]
. 0 <= Node.val <= 500
- All the values
Node.val
are unique. target
is the value of one of the nodes in the tree.0 <= k <= 1000
Solution
Python3
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def distanceK(self, root: TreeNode, target: TreeNode, k: int) -> List[int]:
res = []
mp = {}
def dfs1(node):
if not node: return -1
if node == target:
mp[node] = 0
return 0
if (left := dfs1(node.left)) != -1:
mp[node] = left + 1
return left + 1
if (right := dfs1(node.right)) != -1:
mp[node] = right + 1
return right + 1
return -1
def dfs2(node, length):
if not node: return
if node in mp:
length = mp[node]
if length == k:
res.append(node.val)
dfs2(node.left, length + 1)
dfs2(node.right, length + 1)
dfs1(root)
dfs2(root, mp[root])
return res