题目:原题链接(中等)

标签:树、二叉树、深度优先搜索、广度优先搜索

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O(N)O(N)O(N) O(N)O(N)O(N) 48ms (73.28%)
Ans 2 (Python)
Ans 3 (Python)

解法一(两次遍历):

class Solution:def __init__(self):self.ans = []def distanceK(self, root: TreeNode, target: TreeNode, K: int) -> List[int]:# 深度优先搜索寻找目标结点def dfs(node, distance=-1):# 处理当前节点不存在的情况if not node:return -1# 处理当前节点为目标节点子节点的情况elif distance >= 0:distance += 1if distance == K:  # 如果当前节点到目标节点的距离为指定距离,则记录当前节点,不再继续遍历self.ans.append(node.val)elif distance < K:  # 如果当前节点到目标节点的距离小于指定距离,则继续遍历当前节点的子节点dfs(node.left, distance)dfs(node.right, distance)return distance# 处理当前节点即为目标节点的情况elif node.val == target.val:distance = 0if distance == K:  # 如果当前节点到目标节点的距离为指定距离,则记录当前节点,不再继续遍历self.ans.append(node.val)elif distance < K:  # 如果当前节点到目标节点的距离小于指定距离,则继续遍历当前节点的子节点dfs(node.left, distance)dfs(node.right, distance)return distance# 处理目标节点在当前节点的子树中的情况else:# 递归左子树和右子树left_distance = dfs(node.left, distance)right_distance = dfs(node.right, distance)# 处理目标节点在左子树中的情况if left_distance >= 0:distance = left_distance + 1if distance == K:  # 如果当前节点到目标节点的距离为指定距离,则记录当前节点,不再继续遍历self.ans.append(node.val)elif distance < K:  # 如果当前节点到目标节点的距离小于指定距离,则继续遍历右子树dfs(node.right, distance)return distanceif right_distance >= 0:distance = right_distance + 1if distance == K:  # 如果当前节点到目标节点的距离为指定距离,则记录当前节点,不再继续遍历self.ans.append(node.val)elif distance < K:  # 如果当前节点到目标节点的距离小于指定距离,则继续遍历左子树dfs(node.left, distance)return distancereturn -1dfs(root)return self.ans

LeetCode题解(0863):寻找二叉树中距离指定节点的距离为K的结点(Python)相关推荐

  1. 查找树的指定层级_非递归层次遍历方法实现二叉树中指定节点的层次数查找

    数据结构教材中,提供了基于队列实现一个二叉树的非递归层次遍历算法.但对于一个任意二叉树,如果要查找其中任何一个节点所在的层次数,教科书中并没有给出基于层次遍历的非递归算法.鉴于层次遍历算法比较容易理解 ...

  2. 剑指Offer之寻找二叉树下一个节点

    寻找二叉树下一个节点 1.题目描述 2.题目理解 1.题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. ...

  3. Leetcode 863.二叉树中所有距离为K的结点

    Time: 20190924 Type: Medium 题目描述 给定一个二叉树(具有根结点 root), 一个目标结点 target ,和一个整数值 K . 返回到目标结点 target 距离为 K ...

  4. 设计一个镜面影射算法,将一个二叉树的每个节点的左,右子结点交换位置

    #define OK 1 #define ERROR 0 #include<stdio.h> #include<stdlib.h> typedef char TElemType ...

  5. LeetCode 366. 寻找二叉树的叶子节点(上下翻转二叉树+BFS)

    文章目录 1. 题目 2. 解题 1. 题目 给你一棵二叉树,请按以下要求的顺序收集它的全部节点: 依次从左到右,每次收集并删除所有的叶子节点 重复如上过程直到整棵树为空 示例: 输入: [1,2,3 ...

  6. 二十六、二叉树--查找指定节点

    一.通过前中后序遍历查找指定节点 请编写前序查找,中序查找和后序查找的方法. 并分别使用三种查找方式,查找 heroNO = 5 的节点 并分析各种查找方式,分别比较了多少次 思路分析图解 二.代码实 ...

  7. leetcode——第993题——二叉树的堂兄弟节点

    题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树 ...

  8. 【leetcode 993】【二叉树的堂兄弟节点】

    leetcode 993[二叉树的堂兄弟节点] 这道题给出二叉树root,x和y,要解决的问题是在树中找到x和y,并且确定它们是否为堂兄弟节点的关系. 题目链接 https://leetcode-cn ...

  9. LeetCode题解:寻找比目标字母大的最小字母

    寻找比目标字母大的最小字母 一.题目 给你一个排序后的字符列表 letters ,列表中只包含小写英文字母.另给出一个目标字母 target,请你寻找在这一有序列表里比目标字母大的最小字母. 在比较时 ...

最新文章

  1. IP SOC与Camera ISP
  2. 根据status信息对MySQL服务器进行优化-1
  3. 第68节:Java中的MYSQL运用从小白到大牛
  4. Intellij idea的Dependencies波浪线
  5. 如何打造高性能Web应用
  6. Codeforces 862D. Mahmoud and Ehab and the binary string 【二分】(交互)
  7. 浅谈 Scala 中下划线的用途
  8. hikaripool信息_聊聊hikari连接池的fixed pool design
  9. 洛谷P2258 子矩阵——题解
  10. Ansible中Playbook方法的标准输出定义
  11. android 长截屏实现,Android实现截屏与截长图功能
  12. matlab代码注释方法--单行多行
  13. linux打开笔记本摄像头驱动程序,Linux下使用Opencv打开笔记本摄像头
  14. 网易邮箱大师代收gmail
  15. day11 - 每日总结及作业
  16. openstack queens版本修改admin密码
  17. ImageNet无监督学习最佳性能一次提升7%,媲美监督学习
  18. LVOOP(一)、如何创建类、属性和方法
  19. 实时渲染技术和像素流有哪些不同?
  20. MySQL索引原理,设计原则

热门文章

  1. 将0.1101101*2^(-10)表示成阶码用4位移码、尾数用8位原码(含符号位)的浮点数
  2. 2款无损画质拼图、抠图软件,功能超全超好用
  3. Android反编译工具Android Killer
  4. 华为HCNP认证考试通过啦
  5. ubuntu22.04系统cp2102驱动USB端口占用问题解决
  6. 2020年中国汽车电子软件行业发展现状、竞争格局及未来发展趋势分析,“软件定义汽车”重构汽车产业格局「图」
  7. Nmap的使用方法总结
  8. childNodes和children,firstChild和firstElementChild,lastChild和lastElementChild的区别
  9. 实战 | 手把手教你用Python+OpenCV实现滑块验证码->自动拖动验证
  10. python将json转csv代码示例