LCDistanceK

 avatar
unknown
python
5 months ago
861 B
6
Indexable
class Solution:
  def distanceK(self, root: TreeNode, target: TreeNode, k: int) -> List[int]:
    if not k:
      return [target.val]
    
    parent = {}

    def parents(n, p):
      if n:
        if p:
          parent[n.val] = p
        parents(n.left, n)
        parents(n.right, n)
  
    parents(root, None)

    res = []

    def findNodes(n, level):
      if n:
        if level == 0:
          res.append(n.val)
        else:
          findNodes(n.left, level-1)
          findNodes(n.right, level-1)


    # Children of Target
    findNodes(target, k)

    i = k-1
    n = parent.get(target.val, None)
    prev = target

   # Ancestors or Siblings
    while i > 0 and n:
      findNodes(n.left if n.left != prev else n.right, i-1)
      i = i-1
      prev = n
      n = parent.get(n.val, None)
    
    if n:
      res.append(n.val)
  
    return res
Editor is loading...
Leave a Comment