在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。

如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点

我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y

只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false

示例 1:


输入:root = [1,2,3,4], x = 4, y = 3 输出:false

示例 2:


输入:root = [1,2,3,null,4,null,5], x = 5, y = 4
输出:true

示例 3:

输入:root = [1,2,3,null,4], x = 2, y = 3
输出:false

提示:

  1. 二叉树的节点数介于 2 到 100 之间。
  2. 每个节点的值都是唯一的、范围为 1 到 100 的整数。
# Definition for a binary tree node.
class TreeNode:def __init__(self, x):self.val = xself.left = Noneself.right = Noneclass Solution:# 用深度优先遍历求出每一个节点的深度与父节点 time O(N) space O(N)def isCousins(self, root: TreeNode, x: 'int', y: 'int') -> 'bool':parent = {}depth = {}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]# 层序遍历,若x, y同一节点的左右子树,则return False,否则,继续遍历# 若 x, y在同一层,但不是左右子树,则return Truedef isCousins2(self, root: TreeNode, x: 'int', y: 'int') -> 'bool':queue = [root]while queue:now = []next_queue = []for node in queue:# 若为空if not node:now.append(None)continue# 把该节点的左右值添加if node.left:now.append(node.left.val)else:now.append(None)if node.right:now.append(node.right.val)else:now.append(None)# 若同父节点if x in now[-2:] and y in now[-2:]:return False# 加入下层循环next_queue.append(node.left)next_queue.append(node.right)# 若在列表内if x in now and y in now:return Truequeue = next_queuereturn Falseif __name__ == '__main__':s = Solution()root = TreeNode(10)root.left = TreeNode(5)root.right = TreeNode(-3)root.left.left = TreeNode(3)root.left.left.left = TreeNode(9)root.left.left.right = TreeNode(-2)root.left.right = TreeNode(2)root.left.right.right = TreeNode(1)root.right.right = TreeNode(11)'''输入:10/  \5   -3/ \    \3   2   11/ \   \9  -2   1'''print(s.isCousins2(root, 3, 11))

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. 993 二叉树的堂兄弟节点

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. iOS之深入了解控制器View的加载
  2. Shell中要如何调用别的shell脚本
  3. vs 输入代码时出现火花_在Visual Basic的立即窗口内输入以下语句 X=65
  4. POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)
  5. 【聚类算法】常见的六大聚类算法
  6. 正则表达式,VI,SED及shell编程2010-12-05
  7. 京东三级列表页持续架构优化—前端优化实践
  8. java面试四 运算符测试
  9. 【转】DCMTK 开源库的学习笔记2:直接操作dcm文件中像素数据的尝试
  10. Eclipse(STS 4)闪退导致EGit插件异常
  11. C语言之抽象数据类型(四十七)
  12. 51多项式06——复系数和实系数多项式
  13. 【Tensorlayer系列】深度强化学习之FrozenLake介绍及表格型Q学习求解
  14. Duet Display在PC端无法连接怎么办?
  15. 网站静态页面克隆 | 学习笔记
  16. 【PyCharm 使用指南】之 error running
  17. Java随笔记录第五章:类设计基础
  18. 项目 6 统计雇员薪水
  19. Docker从入门到干活,看这一篇够了!
  20. 知识共享协议与版权声明

热门文章

  1. 【SpringCloud技术专题】「Hystrix」(9)熔断器的原理和实现机制
  2. jeecgboot:主表(antd table)默认选中第一条记录
  3. 蓄冷罐布水器仿真matlab,用于蓄冷罐的布水器及开孔与安装方法与流程
  4. 大数据为各国信息安全带来挑战 美率先采取措施
  5. 斑马打印机ZDesigner GK888t (EPL)型号的java集成
  6. 程序员他们也可以很可爱幽默
  7. 类的静态成员与静态成员函数
  8. 在C++中 :: 的三种意思
  9. 在C语言中使用else if判断数字是正数还是负数或是零。
  10. DNS,二级域名泛解析