题目
解析:
这道题看到固定距离寻找这种限制条件,第一个想到的就应该是BFS。所以这道题目变成了两个部分:
- 将树转化为图,每个节点指向parent节点和左右子节点
- 从target节点出发,BFS寻找特定距离的点
- 值得注意的是,这边给的target是节点,所以不需要额外去寻找target节点
这边将树转化为图有两种做法,一种是利用树的性质,将parent直接作为树节点的属性,代码如下:
class Solution(object):
def distanceK(self, root, target, K):
"""
:type root: TreeNode
:type target: TreeNode
:type K: int
:rtype: List[int]
"""
def add_par(node,par):
if not node:
return
node.par = par
add_par(node.left,node)
add_par(node.right,node)
add_par(root,None)
ans = []
q = collections.deque()
q.append((target,0))
visited = set()
visited.add(target.val)
while q:
curr,dis = q.popleft()
if dis == K:
ans.append(curr.val)
for nei in (curr.left,curr.right,curr.par):
if nei and nei.val not in visited:
q.append((nei,dis+1))
visited.add(nei.val)
return ans
而第二种才是更加标准的做法。将树转化为图通常的表达方式,也就是字典
class Solution(object):
def