# 找 tree 的距離 {%hackmd theme-dark %} root=Node() k=2 1 2 3 4 5 6 7 k = 1-1000 root(1) = 0 (2) = 1 (3) = 1 ```python= def findKdistanceNode(root, target, k): graph = defaultdict(list) # traverse tree into graph # O(N) def buildGraph(node): if not node: return #1 if node.left: graph[node.val].append(node.left) #1:[2] graph[node.left.val].append(node) #2:[1] buildGraph(node.left) if node.right: graph[node.val].append(node.right)#1:[2, 3] graph[node.right.val].append(node)#3:[1] buildGraph(node.right) buildGraph(root) if target.val not in graph: return [] # 1:[2, 3] # 2:[1, 4, 5] # 3:[1, 6, 7] # 4:[2] # ... # ta = 2, k = 1 # use BFS to find distance k ans = [] queue = [(target.val, 0)] seen = set() # O(N) while queue: cur, distance = queue.pop()# cur = 2 , 5, 4 if cur in seen: continue seen.add(cur) # (2, 1) if distance == k: # 0 5 ans.append(cur) # [5, 4, 1] continue for nei in graph[cur]: # 2:[1, 4, 5] queue.append((nei.val, distance+1)) return ans # [1 4 5] # N = tree nodes number # TC: O(N) ``` ```python= def findKdistanceNode(root, k): ans = [] def helper(node, level): # n1 l=0 # n2 l=1 # n4 l=2 if not node: return if level == k: # ans = [4....] ans.append(node.val) return helper(node.left, level+1) # n2 l=1, n4 l=2 helper(node.right, level+1)# helper(root, 0) return ans ``` ###### tags: `mock interview` `面試`