993. 二叉树的堂兄弟节点
在二叉树中,根节点位于深度 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
提示:
- 二叉树的节点数介于
2
到100
之间。 - 每个节点的值都是唯一的、范围为
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. 二叉树的堂兄弟节点相关推荐
- ⭐算法入门⭐《二叉树》简单07 —— LeetCode 993. 二叉树的堂兄弟节点
文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述 在二叉树中,根节点位于 ...
- LeetCode 993. 二叉树的堂兄弟节点(层序遍历)
文章目录 1. 题目 2. 解题 2.1 层序遍历 2.2 递归查找 1. 题目 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同 ...
- LeetCode 993. 二叉树的堂兄弟节点
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...
- 993 二叉树的堂兄弟节点
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树的根节点 r ...
- 二叉树的堂兄弟节点(2种实现方式)
二叉树的堂兄弟节点 题目 二叉树的堂兄弟节点(力扣:993) 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但父节点不同,则它 ...
- 【leetcode 993】【二叉树的堂兄弟节点】
leetcode 993[二叉树的堂兄弟节点] 这道题给出二叉树root,x和y,要解决的问题是在树中找到x和y,并且确定它们是否为堂兄弟节点的关系. 题目链接 https://leetcode-cn ...
- 二叉树的堂兄弟节点-c语言
二叉树的堂兄弟节点-c语言 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出 ...
- LeetCode题解——二叉树的堂兄弟节点
LeetCode题解--二叉树的堂兄弟节点 题目介绍 解题思路 这题考察的就是树的遍历,其中带有2个条件遍历树 第一个条件记录下x和y出现的深度 第二个条件记录下x和y的父节点 当父节点不同xy深度相 ...
- leetcode——第993题——二叉树的堂兄弟节点
题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树 ...
最新文章
- iOS之深入了解控制器View的加载
- Shell中要如何调用别的shell脚本
- vs 输入代码时出现火花_在Visual Basic的立即窗口内输入以下语句 X=65
- POJ 2010 Moo University - Financial Aid(堆维护滑窗kth,二分)
- 【聚类算法】常见的六大聚类算法
- 正则表达式,VI,SED及shell编程2010-12-05
- 京东三级列表页持续架构优化—前端优化实践
- java面试四 运算符测试
- 【转】DCMTK 开源库的学习笔记2:直接操作dcm文件中像素数据的尝试
- Eclipse(STS 4)闪退导致EGit插件异常
- C语言之抽象数据类型(四十七)
- 51多项式06——复系数和实系数多项式
- 【Tensorlayer系列】深度强化学习之FrozenLake介绍及表格型Q学习求解
- Duet Display在PC端无法连接怎么办?
- 网站静态页面克隆 | 学习笔记
- 【PyCharm 使用指南】之 error running
- Java随笔记录第五章:类设计基础
- 项目 6 统计雇员薪水
- Docker从入门到干活,看这一篇够了!
- 知识共享协议与版权声明