title
给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K 。
返回到目标结点 target 距离为 K 的所有结点的值的列表。 答案可以以任何顺序返回。

示例 1:
输入:root = [3,5,1,6,2,0,8,null,null,7,4], target = 5, K = 2
输出:[7,4,1]
解释:
所求结点为与目标结点(值为 5)距离为 2 的结点,
值分别为 7,4,以及 1
注意,输入的 "root" 和 "target" 实际上是树上的结点。
上面的输入仅仅是对这些对象进行了序列化描述。
提示:
- 给定的树是非空的。
- 树上的每个结点都具有唯一的值
0 <= node.val <= 500。 - 目标结点
target是树上的结点。 0 <= K <= 1000.
solution
class Solution:
parent = {}
target = None
ans = []
seen = set()
def distanceK(self, root: TreeNode, target: TreeNode, K: int) -> List[int]:
self.parent = {}
self.target = target
self.addParent(root)
ans = self.getAns(self.target, K)
return ans
def getAns(self, root, k):
if not root or root in self.seen:
return []
self.seen.add(root)
if k == 0:
return [root.val]
elif k > 0:
left, right = self.getAns(root.left, k - 1), self.getAns(root.right, k - 1)
parent = []
if root in self.parent:
parent = self.getAns(self.parent[root], k - 1)
return left + right + parent
return []
def addParent(self, root: TreeNode):
if not root:
return
if root.left:
self.parent[root.left] = root
self.addParent(root.left)
if root.right:
self.parent[root.right] = root
self.addParent(root.right)
return