【leetcode 993】【二叉树的堂兄弟节点】
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}{复杂度分析:}复杂度分析:
- BFS
- 时间复杂度: 看看x和y在哪一层吧,到那一层的最大节点数, O(K)
- 空间复杂度: O(K)
- DFS
- 时间复杂度: O(N) , N为树的节点数量
- 空间复杂度: O(N)
【leetcode 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 ...
- LeetCode题解——二叉树的堂兄弟节点
LeetCode题解--二叉树的堂兄弟节点 题目介绍 解题思路 这题考察的就是树的遍历,其中带有2个条件遍历树 第一个条件记录下x和y出现的深度 第二个条件记录下x和y的父节点 当父节点不同xy深度相 ...
- 993. 二叉树的堂兄弟节点
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树的根节点 r ...
- 993 二叉树的堂兄弟节点
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树的根节点 r ...
- 二叉树的堂兄弟节点(2种实现方式)
二叉树的堂兄弟节点 题目 二叉树的堂兄弟节点(力扣:993) 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但父节点不同,则它 ...
- 二叉树的堂兄弟节点-c语言
二叉树的堂兄弟节点-c语言 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出 ...
- leetcode——第993题——二叉树的堂兄弟节点
题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树 ...
最新文章
- Secure-CRT使用技巧
- 电机高频注入原理_永磁同步电机转子位置与速度估算的新方法,精度好,性价比高...
- 深度学习修炼(五)——基于pytorch神经网络模型进行气温预测
- Ehcache配置文件加载方式
- 双代号网络图基础算法_最新(免锁版)网络图横道图绘制软件,内附安装教程,制图做更快...
- Hadoop:启动与停止命令
- 代码能跑就不要动,为什么我们都会有这样的想法?
- captap生成验证码
- 隐私信息检索(隐匿查询)
- 计算计算机ip地址,怎么样计算电脑的IP地址、IP掩码、默认网关?
- 凡泰极客成为W3C成员并加入MiniApps工作组
- win10运行安卓模拟器蓝屏崩溃
- 网络爬虫是干什么的呢?
- Javaweb-01.html和css
- WebDay18 MySQL存储过程 存储函数 触发器 事务
- 庆阳市西峰区中小学武术教学开展现状及应对措施-4
- 世界各国坐标、中国各省会坐标、echars世界各国中英映射和省市区联动数据
- 排序算法(五)——堆排序算法详解及Python实现
- 阅读使人进步《我的书单》
- 以明道云激起高校学生运动热潮