All Nodes Distance K in Binary Tree

leetcode/all-nodes-distance-k-in-binary-tree

Code

  • O(N) : 44 ms, faster than 38.62% of Python3 online submissions for All Nodes Distance K in Binary Tree.
import collections

class Solution:
    def distanceK(self, root: TreeNode, target: TreeNode, K: int):
        def markparent():
            queue = collections.deque([(root, None)])
            while queue:
                node, parent = queue.popleft()
                node.parent = parent
                if node.left:
                    queue.append((node.left, node))
                if node.right:
                    queue.append((node.right, node))
        markparent()
        queue = collections.deque([(target, 0)])
        seen = set()
        result = []
        while queue:
            node, dist = queue.popleft()
            if dist == K:
                result.append(node.val)
            seen.add(node.val)
            for neighbor in [node.parent, node.left, node.right]:
                if neighbor and neighbor.val not in seen:
                    queue.append((neighbor, dist + 1))
        return result