863 All Nodes Distance K in Binary Tree

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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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]:
        if k == 0:
            return [target.val]

        def dfs(node: TreeNode, parent=None) -> None:
            if not node:
                return
            node.parent = parent
            dfs(node.left, node)
            dfs(node.right, node)

        dfs(root)
        
        queue = [target]
        temp = []
        seen = {target}
        for i in range(0, k):
            if not queue:
                return []
            for n in queue:
                for nei in (n.left, n.right, n.parent):
                    if nei and nei not in seen:
                        seen.add(nei)
                        temp.append(nei)
            queue = temp
            temp = []
        return [n.val for n in queue]