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

这道题给出二叉树root,x和y,要解决的问题是在树中找到x和y,并且确定它们是否为堂兄弟节点的关系。

题目链接

https://leetcode-cn.com/problems/cousins-in-binary-tree/


解题思路与代码思路:

队列实现、BFS

广度优先遍历每一层,存入队列中,判断x和y是否在同一层,如果在,就是判断是否为堂兄弟节点。在同一层中,只有相邻节点并且右边的节点的索引为奇数、左边节点索引为偶数时,才是同一个父节点。如果不满足上面条件,则就是堂兄弟节点

递归DFS

深度优先搜索标记每一个节点,对于每个节点,都存储它的父亲节点和深度到对应的字典中,最后判断x和y在这两个字典中的值就可以了


代码:

BFS法
class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = rightclass Solution(object):def isCousins(self,root,x,y):ans = [root]    while ans:tmp = []            # 存储本层的所有值n = len(ans)        # 每次循环拿一层的数组for i in range(n):  #这个循环把所有节点值存入tmp,然后ans存入每个点的左右孩子r = ans.pop(0)   #每一个节点if r:tmp.append(r.val)ans.append(r.left)   #秘诀在这里,把左右孩子放回去ans.append(r.right)else:tmp.append(None) #如果是空结点,方便判断是否为同一父节点print(tmp)if x in tmp and y in tmp:left = tmp.index(x)  #获取x的索引位置right = tmp.index(y)  if left>right:          # l比r大,调整一下,方便判断,保证r比l大left,right=right,leftif right-1 == left and right%2 != 0 :  #只有l,r相邻并且r为奇数时(l为偶数),才是同一父节点return Falsereturn Truereturn False
t = TreeNode(val=1,left=TreeNode(val=2,left=TreeNode(4),right=TreeNode(5)),right=TreeNode(val=3,left=TreeNode(6),right=TreeNode(7)))s = Solution()
s.isCousins(t,5,7)
DFS递归
class Solution(object):def isCousins(self,root,x,y):parent = {}  #节点的值对应它的parentdepth = {}   # 节点值对应它的深度def dfs(node,par=None):if node:depth[node.val] = 1+ depth[par.val] if par else 0parent[node.val] = pardfs(node.left,node)dfs(node.right,node)dfs(root)return depth[x]==depth[y] and parent[x] != parent[y]

复杂度分析:\color{red}{复杂度分析:}复杂度分析:
  1. BFS
  • 时间复杂度: 看看x和y在哪一层吧,到那一层的最大节点数, O(K)
  • 空间复杂度: O(K)
  1. DFS
  • 时间复杂度: O(N) , N为树的节点数量
  • 空间复杂度: O(N)

【leetcode 993】【二叉树的堂兄弟节点】相关推荐

  1. ⭐算法入门⭐《二叉树》简单07 —— LeetCode 993. 二叉树的堂兄弟节点

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   在二叉树中,根节点位于 ...

  2. LeetCode 993. 二叉树的堂兄弟节点(层序遍历)

    文章目录 1. 题目 2. 解题 2.1 层序遍历 2.2 递归查找 1. 题目 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同 ...

  3. LeetCode 993. 二叉树的堂兄弟节点

    截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...

  4. LeetCode题解——二叉树的堂兄弟节点

    LeetCode题解--二叉树的堂兄弟节点 题目介绍 解题思路 这题考察的就是树的遍历,其中带有2个条件遍历树 第一个条件记录下x和y出现的深度 第二个条件记录下x和y的父节点 当父节点不同xy深度相 ...

  5. 993. 二叉树的堂兄弟节点

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

  6. 993 二叉树的堂兄弟节点

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

  7. 二叉树的堂兄弟节点(2种实现方式)

    二叉树的堂兄弟节点 题目 二叉树的堂兄弟节点(力扣:993) 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但父节点不同,则它 ...

  8. 二叉树的堂兄弟节点-c语言

    二叉树的堂兄弟节点-c语言 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出 ...

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

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

最新文章

  1. Secure-CRT使用技巧
  2. 电机高频注入原理_永磁同步电机转子位置与速度估算的新方法,精度好,性价比高...
  3. 深度学习修炼(五)——基于pytorch神经网络模型进行气温预测
  4. Ehcache配置文件加载方式
  5. 双代号网络图基础算法_最新(免锁版)网络图横道图绘制软件,内附安装教程,制图做更快...
  6. Hadoop:启动与停止命令
  7. 代码能跑就不要动,为什么我们都会有这样的想法?
  8. captap生成验证码
  9. 隐私信息检索(隐匿查询)
  10. 计算计算机ip地址,怎么样计算电脑的IP地址、IP掩码、默认网关?
  11. 凡泰极客成为W3C成员并加入MiniApps工作组
  12. win10运行安卓模拟器蓝屏崩溃
  13. 网络爬虫是干什么的呢?
  14. Javaweb-01.html和css
  15. WebDay18 MySQL存储过程 存储函数 触发器 事务
  16. 庆阳市西峰区中小学武术教学开展现状及应对措施-4
  17. 世界各国坐标、中国各省会坐标、echars世界各国中英映射和省市区联动数据
  18. 排序算法(五)——堆排序算法详解及Python实现
  19. 阅读使人进步《我的书单》
  20. 以明道云激起高校学生运动热潮

热门文章

  1. Java实现远程主机唤醒 (WOL)
  2. 【springcloud】功能尝试(二)熔断器的三个功能
  3. R语言DCC-GARCH模型
  4. 新神奇传说补丁_如何在神奇宝贝Go中捕捉传说中的神奇宝贝
  5. mbp2015 款发热主因
  6. 世纪互联与华为联手打造云数据中心是一步好旗!
  7. BaseRecyclerViewAdapterHelper用法抄袭
  8. 2017.7.10 noi2008 假面舞会
  9. IPv6:不发展才是最大的不安全
  10. oracle实现矩阵倒置,Oracle 倒置矩阵 与 大小写问题