Leetcode 863. All Nodes Distance K in Binary Tree (python)

Leetcode 863. All Nodes Distance K in Binary Tree

题目

在这里插入图片描述
在这里插入图片描述

解析:

这道题看到固定距离寻找这种限制条件,第一个想到的就应该是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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值