LeetCode 993. 二叉树的堂兄弟节点
截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载
下载链接:https://pan.baidu.com/s/1hjwK0ZeRxYGB8lIkbKuQgQ
提取码:6666
public boolean isCousins(TreeNode root, int x, int y) {//两个队列一个存放树的节点,一个存放节点对应的值Queue<TreeNode> queue = new LinkedList<>();Queue<Integer> value = new LinkedList<>();queue.add(root);value.add(root.val);//如果队列不为空,说明树的节点没有遍历完,就继续遍历while (!queue.isEmpty()) {//BFS是从上到下一层一层的打印,levelSize表示//当前层的节点个数int levelSize = queue.size();for (int i = 0; i < levelSize; i++) {//节点和节点值同时出队TreeNode poll = queue.poll();value.poll();//首先判断x和y是否是兄弟节点的值,也就是判断他们的父节点//是否是同一个if (poll.left != null && poll.right != null) {//如果是亲兄弟节点,直接返回falseif ((poll.left.val == x && poll.right.val == y) ||(poll.left.val == y && poll.right.val == x)) {return false;}}//左子节点不为空加入到队列中if (poll.left != null) {queue.offer(poll.left);value.offer(poll.left.val);}//右子节点不为空加入到队列中if (poll.right != null) {queue.offer(poll.right);value.offer(poll.right.val);}}//判断当前层是否包含这两个节点的值,如果包含就是堂兄弟节点if (value.contains(x) && value.contains(y))return true;}return false;
}
时间复杂度:O(n)
,n
是节点的个数,最差情况下遍历到最后一层。
空间复杂度:O(n)
,使用两个队列,队列中一个存放的是节点,一个存放的是节点的值。
private TreeNode xParent = null;//x的父节点
private TreeNode yParent = null;//y的父节点
private int xDepth = -1;//x的深度
private int yDepth = -2;//y的深度public boolean isCousins(TreeNode root, int x, int y) {dfs(root, null, x, y, 0);//如果他俩的深度一样,也就是在同一层,又不是同一个父亲,那么他俩//就是堂兄弟节点,否则不是return xDepth == yDepth && xParent != yParent ? true : false;
}public void dfs(TreeNode root, TreeNode parent, int x, int y, int depth) {if (root == null)return;if (root.val == x) {//如果找到了x节点,就把他的父节点和深度记录下来xParent = parent;xDepth = depth;} else if (root.val == y) {//如果找到了y节点,就把他的父节点和深度记录下来yParent = parent;yDepth = depth;}//如果确定他俩是堂兄弟节点了,直接返回,不用再往下遍历了if (xDepth == yDepth && xParent != yParent)return;dfs(root.left, root, x, y, depth + 1);dfs(root.right, root, x, y, depth + 1);
}
时间复杂度: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题解——二叉树的堂兄弟节点
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 处. 如果二叉树的两个节点深度相同,但父节点不同,则它 ...
- 【leetcode 993】【二叉树的堂兄弟节点】
leetcode 993[二叉树的堂兄弟节点] 这道题给出二叉树root,x和y,要解决的问题是在树中找到x和y,并且确定它们是否为堂兄弟节点的关系. 题目链接 https://leetcode-cn ...
- 二叉树的堂兄弟节点-c语言
二叉树的堂兄弟节点-c语言 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出 ...
- leetcode——第993题——二叉树的堂兄弟节点
题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树 ...
最新文章
- Normalization 的发展历程
- python网络爬虫工程师薪资-月薪2万的爬虫工程师,Python需要学到什么程度?
- cocos2dx3.0-tinyxml在Android环境下解析xml失败的问题
- 巧妙设置yum软件库轻松解决软件包安装问题
- Entropy Broker 2.0 发布,加密安全随机数
- 技术人员写blog的好处
- WebApi网关之Bumblebee和Ocelot性能对比
- 大数据_Flink_数据处理_流式数据源测试---Flink工作笔记0010
- Jmeter系列之数据库操作
- 关于Meta标签中format-detection属性及含义
- html 样式优先级,CSS样式优先级
- MySQL 之 约束 (主键、唯一、非空、自增、外键)
- centos linux引导修复_CentOs7 修复 引导启动
- 【PS】如何简单的处理带晒伤皮肤的婚纱照?红斑/脱皮/减淡红色
- 计算机自定义桌面,如何自定义电脑桌面的图标显示
- 双向链表(Doubly Linked List)
- 使用占位符预防SQL注入的原理
- 量化投资学习-8:庄家与散户是一场猫抓老鼠的游戏
- **软件著作权登记**
- ios中safari无痕浏览模式下,localStorage的支持情况