【题目】
【代码】
两个小时写出来的垃圾解法,真的是菜狗本狗了
class Solution:
def visit(self,root,level=0):
if not root:return
if root.left:
self.cnt[root.left.val][root.val]=1
self.cnt[root.val][root.left.val]=1
if root.right:
self.cnt[root.right.val][root.val]=1
self.cnt[root.val][root.right.val]=1
if root==self.target:
self.target_level=level
self.visit(root.left,level+1)
self.visit(root.right,level+1)
def distanceK(self, root: TreeNode, target: TreeNode, k: int) -> List[int]:
self.target=target
self.target_level=-1
self.cnt=[[-1 for i in range(501)] for ii in range(501)]
self.visit(root)
drop=set()
level2id={}
queue=set([target.val])
for level in range(1,k+1):
l=len(queue)
temp_add=set()
for inner in range(l):
temp=queue.pop()
drop.add(temp)
for ii in range(501):
if self.cnt[temp][ii]!=-1 and ii !=target.val and ii not in drop:
temp_add.add(ii)
queue=queue|temp_add
if level+1<=k:
drop=drop|set(queue)
return list(queue)